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

<channel>
	<title>Security Advancements at the Monastery &#187; Open Source</title>
	<atom:link href="http://blog.securitymonks.com/category/open-source/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.securitymonks.com</link>
	<description>Information about developments at the Monastery</description>
	<lastBuildDate>Fri, 03 Sep 2010 05:41:44 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Google Visualization: An Example Graphing NVD CVE Data</title>
		<link>http://blog.securitymonks.com/2010/04/16/google-visualization-an-example-graphing-nvd-cve-data/</link>
		<comments>http://blog.securitymonks.com/2010/04/16/google-visualization-an-example-graphing-nvd-cve-data/#comments</comments>
		<pubDate>Fri, 16 Apr 2010 15:54:42 +0000</pubDate>
		<dc:creator>John Gerber</dc:creator>
				<category><![CDATA[CERT]]></category>
		<category><![CDATA[CVE]]></category>
		<category><![CDATA[CVSS]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Metrics]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[NIST]]></category>
		<category><![CDATA[NVD]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[SCAP]]></category>
		<category><![CDATA[Visualization]]></category>
		<category><![CDATA[Vulnerability]]></category>
		<category><![CDATA[perl]]></category>

		<guid isPermaLink="false">http://blog.securitymonks.com/?p=1825</guid>
		<description><![CDATA[Google visualization offers graphing abilities to any number of projects.  Why should security professionals care?  If you are going to have to collect and present security metrics, it is best to showcase them in the very best manner possible.  Andrew Jaquith in his article, &#8220;Creating meaningful information security metrics&#8221; states, &#8220;For 2010, [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.securitymonks.com/wp-content/uploads/2010/04/googlevisualization.gif" align="left" width=100/>Google visualization offers graphing abilities to any number of projects.  Why should security professionals care?  If you are going to have to collect and present security metrics, it is best to showcase them in the very best manner possible.  Andrew Jaquith in his article, &#8220;<a href="http://searchsecurity.techtarget.com/magazineFeature/0,296894,sid14_gci1394672_mem1,00.html">Creating meaningful information security metrics</a>&#8221; states, &#8220;For 2010, Forrester Research expects that overall security budgets will rise less than 5 percent over 2009 &#8211;higher than in the previous year, but not by much.&#8221;  Andrew goes on to point out, &#8220;smart security managers, sensing sudden vulnerability in their budgets, seek better ways to measure and prove the value of what they do every day.&#8221;</p>
<p>
In today&#8217;s work environment there is a need to show changes, potential risks, improved performance, etc. in all areas of the company&#8217;s operations.  Security professionals need to be prepared to answer the basic question, &#8220;why should the CIO or CEO care about security?&#8221;  CSO Online has a great quote from the post, &#8220;<a href="http://www.csoonline.com/article/550413/From_the_CIO_Why_You_Didn_t_Get_the_CISO_Job">From the CIO: Why You Didn&#8217;t Get the CISO Job</a>&#8221; that challenges us to consider our views when it comes to security.  The post states, “laser focus on your speciality is great in middle management. It’s what we want. One of the really hard things about jumping from management to executive is a focus on the whole of the business. It’s a rare person who manages it quickly or easily.”  That is basically the problem with metrics.  It is a battle between generalization to the point of uselessness and details to the point of not being understandable or collectible.  At the end of the day, something needs to be done because the security industry is currently leaving upper management in the position of not understanding what is going on within their business.  That is a risk that not acceptable.
</p>
<p>
Andrew&#8217;s article discusses what kind of security metrics should be used.  Additional sources of information on security metrics can be found in a previous post entitled &#8220;<a href="http://blog.securitymonks.com/2007/04/29/security-metrics/">Security Metrics</a>.&#8221;  The post provides links to wonderful sources on security metric information.  You might also want to take a look at the <a href="http://cisecurity.org/en-us/?route=downloads.show.single.metrics.100">CIS Consensus Security Metrics v1.0.0</a> guide, NIST Special Publication (SP) <a href="http://csrc.nist.gov/publications/nistpubs/800-55-Rev1/SP800-55-rev1.pdf">800-55 Rev 1</a> &#8220;Security Metrics Guide for Information Technology Systems&#8221;, <a href="http://csrc.nist.gov/publications/nistir/ir7564/nistir-7564_metrics-research.pdf">NIST IR-7564</a> &#8220;Directions in Security Metrics Research&#8221;,  &#8220;<a href="http://www.gilligangroupinc.com/headlines/2009/feb-23-related/20090223-cag-draft1.0.pdf">Twenty Most Important Controls and Metrics for Effective Cyber Defense and Continuous FISMA Compliance</a>,&#8221; and &#8220;<a href="http://www.slideshare.net/ramsesgallego/metrics-measures-myths">Metrics, measures &#038; Myths</a>.&#8221;  Once you have start gathering metrics, you will want to present them in an easy to understand format.  This is where Google Visualization can help.
</p>
<p>
Today&#8217;s post walks through an example using the data from the National Institute of Standards and Technology (NIST) National Vulnerability Database (<a href="http://nvd.nist.gov/">NVD</a><a>) Common Vulnerabilities and Exposures (</a><a href="http://cve.mitre.org/">CVE</a>) database.  The purpose is to provide a working example from which you can learn and apply to the various metrics gathered at your organization.
</p>
<p><h3>Data Source</h3>
</p>
<p>
A previous post, &#8220;<a href="http://blog.securitymonks.com/2009/08/09/standardization-and-interoperability-in-security/">Standardization and Interoperability in Security</a>,&#8221; discussed how the Security Content Automation Protocol (<a href="http://scap.nist.gov/">SCAP</a>) is an attempt to help defenders by providing a collection of XML schemas/standards that allow technical security information to be exchanged between tools.  SCAP components consists of:</p>
<ul>
<li><a href="http://cce.mitre.org/" onclick="javascript:pageTracker._trackPageview('/outbound/article/cce.mitre.org');">Common Configuration Enumeration (CCE)</a>: provide unique identifiers to system configuration issues in order to facilitate fast and accurate correlation of configuration data across multiple information sources and tools.</li>
<li><a href="http://cpe.mitre.org/" onclick="javascript:pageTracker._trackPageview('/outbound/article/cpe.mitre.org');">Common Platform Enumeration (CPE)</a>:  a structured naming scheme for information technology systems, platforms, and packages.</li>
<li><a href="http://cve.mitre.org/" onclick="javascript:pageTracker._trackPageview('/outbound/article/cve.mitre.org');">Common Vulnerability Enumeration (CVE)</a>: a dictionary of publicly known information security vulnerabilities and exposures.</li>
<li><a href="http://www.first.org/cvss/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.first.org');">Common Vulnerability Scoring System (CVSS)</a>: a vulnerability scoring system designed to provide an open and standardized method of rating IT vulnerabilities.  NIST has even provided a <a href="http://nvd.nist.gov/cvss.cfm?calculator&#038;adv&#038;version=2" onclick="javascript:pageTracker._trackPageview('/outbound/article/nvd.nist.gov');">calculator</a> for creating CVSS vulnerability severity scores. </li>
<li><a href="http://scap.nist.gov/specifications/xccdf/" onclick="javascript:pageTracker._trackPageview('/outbound/article/scap.nist.gov');">eXtensible Checklist Configuration Description Format (XCCDF)</a>: a specification language for writing security checklists, benchmarks, and related kinds of documents.  NIST has released the NIST Interagency Report 7275 Revision 3 &#8220;<a href="http://csrc.nist.gov/publications/nistir/ir7275r3/NISTIR-7275r3.pdf" onclick="javascript:pageTracker._trackPageview('/outbound/article/csrc.nist.gov');">Specification for Extensible Configuration Checklist Description Format (XCCDF) Version 1.1.4</a>.&#8221;</li>
<li><a href="http://oval.mitre.org/" onclick="javascript:pageTracker._trackPageview('/outbound/article/oval.mitre.org');">Open Vulnerability Assessment Language (OVAL)</a>: an information security community standard to promote open and publicly available security content, and to standardize the transfer of this information across security tools and services.</li>
</ul>
<p>
We are going to make use of the data from <a href="http://static.nvd.nist.gov/feeds/xml/cve/nvdcve-2.0-recent.xml">NVD/CVE XML feed</a> with the Common Vulnerability Scoring System (<a href="http://www.first.org/cvss/cvss-guide.html">CVSS</a>) mappings (version 2.0).  NIST documentation states:<br />
<blockquote>CVSS provides an open framework for communicating the characteristics and impacts of IT vulnerabilities. Its quantitative model ensures repeatable accurate measurement while enabling users to see the underlying vulnerability characteristics that were used to generate the scores. Thus, CVSS is well suited as a standard measurement system for industries, organizations, and governments that need accurate and consistent vulnerability impact scores. Two common uses of CVSS are prioritization of vulnerability remediation activities and in calculating the severity of vulnerabilities discovered on one&#8217;s systems. </p></blockquote>
<p>
NVD provides CVSS &#8216;<b>base scores</b>&#8216; representing the innate characteristics of each vulnerability.  &#8216;<b>Temporal scores</b>,&#8217; which change over time due to events external to the vulnerability, are not provided though NVD does provide a <a href="http://nvd.nist.gov/cvss.cfm?calculator">CVSS score calculator</a>.  This allows an organization to add temporal data and even factor in &#8216;<b>environmental scores</b>&#8216; customized to reflect the impact of the vulnerability on the organization.  Please refer to the <a href="http://www.first.org/cvss/cvss-guide.html">CVSS standards guide</a> and the <a herf="http://www.owasp.org/index.php/OWASP_Risk_Rating_Methodology">OWASP Risk Rating Methodology</a> concerning factors involved in estimating the severity of risks to your business.
</p>
<p><h4><b>NVD CVE XML Schema</b></h4>
</p>
<p>
For our example, we will be using the data feeds <a href="http://static.nvd.nist.gov/feeds/xml/cve/nvdcve-2.0-2010.xml">nvdcve-2.0-2010.xml</a> and <a href="http://static.nvd.nist.gov/feeds/xml/cve/nvdcve-2.0-2090.xml">nvdcve-2.0-2009.xml</a>.  Examining the <a href="http://nvd.nist.gov/schema/nvd-cve-feed_2.0.xsd">CVE XML 2.0 Schema</a>, we are particularly interested in certain vulnerability and CVSS scoring information.  For example, for CVE-2010-1228, we will parse and pull the following kind of information:
</p>
<p><pre><tt><b><font color="#3366FF">&lt;entry</font></b> <font color="#009900">id</font><font color="#990000">=</font><font color="#CC3333">"CVE-2010-1228"</font><b><font color="#3366FF">&gt;</font></b>
  <b><font color="#3366FF">&lt;vuln:cve-id&gt;</font></b>CVE-2010-1228<b><font color="#3366FF">&lt;/vuln:cve-id&gt;</font></b>
  <b><font color="#3366FF">&lt;vuln:published-datetime&gt;</font></b>2010-04-01T18:30:00.453-04:00
  <b><font color="#3366FF">&lt;/vuln:published-datetime&gt;</font></b>
  <b><font color="#3366FF">&lt;vuln:last-modified-datetime&gt;</font></b>2010-04-05T00:00:00.000-04:00
  <b><font color="#3366FF">&lt;/vuln:last-modified-datetime&gt;</font></b>
  <b><font color="#3366FF">&lt;vuln:cvss&gt;</font></b>
    <b><font color="#3366FF">&lt;cvss:base_metrics&gt;</font></b>
      <b><font color="#3366FF">&lt;cvss:score&gt;</font></b>10.0<b><font color="#3366FF">&lt;/cvss:score&gt;</font></b>
      <b><font color="#3366FF">&lt;cvss:access-vector&gt;</font></b>NETWORK<b><font color="#3366FF">&lt;/cvss:access-vector&gt;</font></b>
      <b><font color="#3366FF">&lt;cvss:access-complexity&gt;</font></b>LOW<b><font color="#3366FF">&lt;/cvss:access-complexity&gt;</font></b>
      <b><font color="#3366FF">&lt;cvss:authentication&gt;</font></b>NONE<b><font color="#3366FF">&lt;/cvss:authentication&gt;</font></b>
      <b><font color="#3366FF">&lt;cvss:confidentiality-impact&gt;</font></b>COMPLETE<b><font color="#3366FF">&lt;/cvss:confidentiality-impact&gt;</font></b>
      <b><font color="#3366FF">&lt;cvss:integrity-impact&gt;</font></b>COMPLETE<b><font color="#3366FF">&lt;/cvss:integrity-impact&gt;</font></b>
      <b><font color="#3366FF">&lt;cvss:availability-impact&gt;</font></b>COMPLETE<b><font color="#3366FF">&lt;/cvss:availability-impact&gt;</font></b>
      <b><font color="#3366FF">&lt;cvss:source&gt;</font></b>http://nvd.nist.gov<b><font color="#3366FF">&lt;/cvss:source&gt;</font></b>
    <b><font color="#3366FF">&lt;/cvss:base_metrics&gt;</font></b>
  <b><font color="#3366FF">&lt;/vuln:cvss&gt;</font></b>
<b><font color="#3366FF">&lt;/entry&gt;</font></b>
</tt></pre>
</p>
<p><h4><b>Using Perl to Retrieve the CVE File</b></h4>
</p>
<p>
Initially we will read the <a href="http://static.nvd.nist.gov/feeds/xml/cve/nvdcve-2.0-2010.xml">nvdcve-2.0-2010.xml</a> and <a href="http://static.nvd.nist.gov/feeds/xml/cve/nvdcve-2.0-2090.xml">nvdcve-2.0-2009.xml</a> files.  If we start retrieving the file regularly, we would want to change this to <a href="http://static.nvd.nist.gov/feeds/xml/cve/nvdcve-2.0-recent.xml">nvdcve-2.0-recent.xml</a>.  Of course, previous years can also be read in to provide a longer perspective on vulnerabilities.  A simple example of a Perl subroutine to read the NVD CVE file and save it locally would be:
</p>
<p><pre><tt><b><font color="#3366FF">sub</font></b> readpage <font color="#CC3333">{</font>
   <b><font color="#3366FF">my</font></b><font color="#990000">(</font><font color="#009900">$url</font><font color="#990000">,</font><font color="#009900">$nvd_file</font><font color="#990000">)</font> <font color="#990000">=</font> <font color="#009900">@_</font><font color="#990000">;</font>
   <b><font color="#3366FF">my</font></b><font color="#990000">(</font><font color="#009900">$proxy</font><font color="#990000">)</font> <font color="#990000">=</font> <font color="#CC3333">"http://your-proxy-server:proxy-port"</font><font color="#990000">;</font>
   <b><font color="#3366FF">my</font></b> <font color="#009900">$ua</font> <font color="#990000">=</font> new LWP<font color="#990000">::</font>UserAgent<font color="#990000">;</font>
   <font color="#009900">$ua</font><font color="#990000">-&gt;</font><b><font color="#000000">proxy</font></b><font color="#990000">(</font>http  <font color="#990000">=&gt;</font> <font color="#009900">$proxy</font><font color="#990000">);</font>
   <font color="#009900">$ua</font><font color="#990000">-&gt;</font><b><font color="#000000">proxy</font></b><font color="#990000">(</font>ftp <font color="#990000">=&gt;</font> <font color="#009900">$proxy</font><font color="#990000">);</font>
   <font color="#009900">$ua</font><font color="#990000">-&gt;</font><b><font color="#000000">proxy</font></b><font color="#990000">(</font>https <font color="#990000">=&gt;</font> <font color="#009900">$proxy</font><font color="#990000">);</font>
   <i><font color="#996633"># Go out and retrieve page</font></i>
   <b><font color="#3366FF">my</font></b> <font color="#009900">$req</font> <font color="#990000">=</font> new HTTP<font color="#990000">::</font><b><font color="#000000">Request</font></b><font color="#990000">(</font><font color="#CC3333">'GET'</font><font color="#990000">,</font> <font color="#009900">$url</font><font color="#990000">);</font>
   <b><font color="#3366FF">my</font></b> <font color="#009900">$res</font> <font color="#990000">=</font> <font color="#009900">$ua</font><font color="#990000">-&gt;</font><b><font color="#000000">request</font></b><font color="#990000">(</font><font color="#009900">$req</font><font color="#990000">);</font>
   <b><font color="#3366FF">my</font></b> <font color="#009900">$pjstatus</font> <font color="#990000">=</font> <font color="#993399">1</font><font color="#990000">;</font>
   <i><font color="#996633"># Check if the requested webpage is there and return results</font></i>
   <b><font color="#3366FF">if</font></b> <font color="#990000">(</font><font color="#009900">$res</font><font color="#990000">-&gt;</font>is_success<font color="#990000">)</font> <font color="#CC3333">{</font> <i><font color="#996633"># Request successful</font></i>
       <b><font color="#3366FF">open</font></b><font color="#990000">(</font>OUTFILE<font color="#990000">,</font><font color="#CC3333">"&gt;$nvd_file"</font><font color="#990000">)</font> <font color="#990000">||</font> <font color="#990000">(</font><font color="#009900">$pjstatus</font> <font color="#990000">=</font> <font color="#993399">0</font><font color="#990000">);</font>
       <b><font color="#3366FF">if</font></b> <font color="#990000">(</font><font color="#009900">$pjstatus</font><font color="#990000">)</font> <font color="#CC3333">{</font>
          <b><font color="#3366FF">print</font></b> OUTFILE <font color="#009900">$res</font><font color="#990000">-&gt;</font>content<font color="#990000">;</font>
       <font color="#CC3333">}</font>
       <b><font color="#3366FF">close</font></b><font color="#990000">(</font>OUTFILE<font color="#990000">);</font>
   <font color="#CC3333">}</font>
   <b><font color="#3366FF">else</font></b> <font color="#CC3333">{</font>
      <font color="#009900">$pjstatus</font> <font color="#990000">=</font> <font color="#993399">0</font><font color="#990000">;</font>
   <font color="#CC3333">}</font>
   <b><font color="#3366FF">return</font></b><font color="#990000">(</font><font color="#009900">$pjstatus</font><font color="#990000">);</font>
<font color="#CC3333">}</font>
</tt></pre>
</p>
<p>
Please <b>substitute</b> &#8220;http://your-proxy-server:proxy-port&#8221; with your site&#8217;s proxy server and port, if applicable.
</p>
<p><h4><b>Creating a MYSQL Table to Hold the Data</b></h4>
</p>
<p>
There is a great deal of information in the NVD CVE file.  You will need to determine what information your organization will be interested in storing and graphing.  For better or worse, folks have come to expect vulnerabilities to have a &#8220;Low,&#8221; &#8220;Medium,&#8221; or &#8220;High&#8221; score.  NIST has stated concerning the NVD Vulnerability <b>Severity Ratings</b>:</p>
<blockquote><p>
NVD provides severity rankings of &#8220;Low,&#8221; &#8220;Medium,&#8221; and &#8220;High&#8221; in addition to the numeric CVSS scores but these qualitative rankings are simply mapped from the numeric CVSS scores:<br />
1. Vulnerabilities are labeled &#8220;Low&#8221; severity if they have a CVSS base score of 0.0-3.9.<br />
2. Vulnerabilities will be labeled &#8220;Medium&#8221; severity if they have a base CVSS score of 4.0-6.9.<br />
3. Vulnerabilities will be labeled &#8220;High&#8221; severity if they have a CVSS base score of 7.0-10.0.
</p></blockquote>
<p>
While preferring quantitative over qualitative values, for this example I would like to create a stacked column chart.  We will add a severity column which is based on the CVSS score.  An example table follows:
</p>
<p><pre><tt><b><font color="#3366FF">CREATE</font></b> <b><font color="#3366FF">DATABASE</font></b> vulnerabilities<font color="#990000">;</font>
<b><font color="#3366FF">USE</font></b> vulnerabilities<font color="#990000">;</font>
<b><font color="#3366FF">DROP</font></b> <b><font color="#3366FF">TABLE</font></b> <b><font color="#3366FF">IF</font></b> <b><font color="#3366FF">EXISTS</font></b> <font color="#CC3333">`nvdcve`</font><font color="#990000">;</font>
<b><font color="#3366FF">CREATE</font></b> <b><font color="#3366FF">TABLE</font></b> <font color="#CC3333">`nvdcve`</font> <font color="#990000">(</font>
  <font color="#CC3333">`cve_id`</font> <font color="#009900">varchar</font><font color="#990000">(</font><font color="#993399">13</font><font color="#990000">)</font> <b><font color="#3366FF">NOT</font></b> <b><font color="#3366FF">NULL</font></b><font color="#990000">,</font>
  <font color="#CC3333">`published`</font> <font color="#009900">datetime</font> <b><font color="#3366FF">default</font></b> <b><font color="#3366FF">NULL</font></b><font color="#990000">,</font>
  <font color="#CC3333">`modified`</font> <font color="#009900">datetime</font> <b><font color="#3366FF">default</font></b> <b><font color="#3366FF">NULL</font></b><font color="#990000">,</font>
  <font color="#CC3333">`score`</font> <font color="#009900">DECIMAL</font><font color="#990000">(</font><font color="#993399">5</font><font color="#990000">,</font><font color="#993399">2</font><font color="#990000">)</font> <b><font color="#3366FF">default</font></b> <font color="#CC3333">'0.0'</font><font color="#990000">,</font>
  <font color="#CC3333">`severity`</font> <font color="#009900">varchar</font><font color="#990000">(</font><font color="#993399">6</font><font color="#990000">)</font> <b><font color="#3366FF">default</font></b> <font color="#CC3333">'LOW'</font><font color="#990000">,</font>
  <font color="#CC3333">`vector`</font> <font color="#009900">varchar</font><font color="#990000">(</font><font color="#993399">25</font><font color="#990000">)</font> <b><font color="#3366FF">default</font></b> <b><font color="#3366FF">NULL</font></b><font color="#990000">,</font>
  <font color="#CC3333">`complexity`</font> <font color="#009900">varchar</font><font color="#990000">(</font><font color="#993399">25</font><font color="#990000">)</font> <b><font color="#3366FF">default</font></b> <b><font color="#3366FF">NULL</font></b><font color="#990000">,</font>
  <font color="#CC3333">`authentication`</font> <font color="#009900">varchar</font><font color="#990000">(</font><font color="#993399">25</font><font color="#990000">)</font> <b><font color="#3366FF">default</font></b> <b><font color="#3366FF">NULL</font></b><font color="#990000">,</font>
  <font color="#CC3333">`confidentiality`</font> <font color="#009900">varchar</font><font color="#990000">(</font><font color="#993399">25</font><font color="#990000">)</font> <b><font color="#3366FF">default</font></b> <font color="#CC3333">'NONE'</font><font color="#990000">,</font>
  <font color="#CC3333">`integrity`</font> <font color="#009900">varchar</font><font color="#990000">(</font><font color="#993399">25</font><font color="#990000">)</font> <b><font color="#3366FF">default</font></b> <font color="#CC3333">'NONE'</font><font color="#990000">,</font>
  <font color="#CC3333">`availability`</font> <font color="#009900">varchar</font><font color="#990000">(</font><font color="#993399">25</font><font color="#990000">)</font> <b><font color="#3366FF">default</font></b> <font color="#CC3333">'NONE'</font><font color="#990000">,</font>
  <font color="#CC3333">`summary`</font> <font color="#009900">varchar</font><font color="#990000">(</font><font color="#993399">512</font><font color="#990000">)</font> <b><font color="#3366FF">default</font></b> <b><font color="#3366FF">NULL</font></b><font color="#990000">,</font>
  <b><font color="#3366FF">PRIMARY</font></b> <b><font color="#3366FF">KEY</font></b>  <font color="#990000">(</font><font color="#CC3333">`cve_id`</font><font color="#990000">),</font>
  <b><font color="#3366FF">INDEX</font></b> <font color="#990000">(</font>score<font color="#990000">),</font>
  <b><font color="#3366FF">INDEX</font></b> <font color="#990000">(</font>vector<font color="#990000">)</font>
<font color="#990000">)</font>
</tt></pre>
</p>
<p><h4><b>Using Perl Populating the Database</b></h4>
</p>
<p>
Populating the database table is simply a matter of reading the file and adding the entries to the table.  An example Perl subroutine follows:
</p>
<p>
<!-- Generator: GNU source-highlight 3.1.3<br />
by Lorenzo Bettini</p>
<p>http://www.lorenzobettini.it</p>
<p>http://www.gnu.org/software/src-highlite --></p>
<pre><tt><b><font color="#3366FF">sub</font></b> readxml <font color="#CC3333">{</font>
   <b><font color="#3366FF">my</font></b><font color="#990000">(</font><font color="#009900">$nvd_file</font><font color="#990000">,</font> <font color="#009900">$dbh</font><font color="#990000">)</font> <font color="#990000">=</font> <font color="#009900">@_</font><font color="#990000">;</font>
   <b><font color="#3366FF">my</font></b> <font color="#009900">$parser</font> <font color="#990000">=</font> XML<font color="#990000">::</font>LibXML<font color="#990000">-&gt;</font> <b><font color="#000000">new</font></b><font color="#990000">();</font>
   <b><font color="#3366FF">my</font></b> <font color="#009900">$doc</font>    <font color="#990000">=</font> <font color="#009900">$parser</font><font color="#990000">-&gt;</font> <b><font color="#000000">parse_file</font></b><font color="#990000">(</font><font color="#009900">$nvd_file</font><font color="#990000">);</font>
   <b><font color="#3366FF">my</font></b> <font color="#009900">$xc</font>     <font color="#990000">=</font> XML<font color="#990000">::</font>LibXML<font color="#990000">::</font>XPathContext<font color="#990000">-&gt;</font> <b><font color="#000000">new</font></b><font color="#990000">(</font> <font color="#009900">$doc</font><font color="#990000">-&gt;</font><b><font color="#000000">documentElement</font></b><font color="#990000">()</font> <font color="#990000">);</font>
   <font color="#009900">$xc</font><font color="#990000">-&gt;</font> <b><font color="#000000">registerNs</font></b><font color="#990000">(</font>
      def  <font color="#990000">=&gt;</font> <font color="#CC3333">'http://scap.nist.gov/schema/feed/vulnerability/2.0'</font> <font color="#990000">);</font>
   <font color="#009900">$xc</font><font color="#990000">-&gt;</font> <b><font color="#000000">registerNs</font></b><font color="#990000">(</font>
     vuln <font color="#990000">=&gt;</font> <font color="#CC3333">'http://scap.nist.gov/schema/vulnerability/0.4'</font> <font color="#990000">);</font>
   <font color="#009900">$xc</font><font color="#990000">-&gt;</font> <b><font color="#000000">registerNs</font></b><font color="#990000">(</font> cvss <font color="#990000">=&gt;</font> <font color="#CC3333">'http://scap.nist.gov/schema/cvss-v2/0.2'</font> <font color="#990000">);</font>
   <b><font color="#3366FF">for</font></b> <b><font color="#3366FF">my</font></b> <font color="#009900">$entry</font> <font color="#990000">(</font><font color="#009900">$xc</font><font color="#990000">-&gt;</font> <b><font color="#000000">findnodes</font></b><font color="#990000">(</font><font color="#CC3333">"/def:nvd/def:entry"</font><font color="#990000">))</font> <font color="#CC3333">{</font>
      <b><font color="#3366FF">my</font></b> <font color="#009900">$cve</font> <font color="#990000">=</font> <font color="#009900">$xc</font><font color="#990000">-&gt;</font> <b><font color="#000000">find</font></b><font color="#990000">(</font><font color="#CC3333">'vuln:cve-id'</font><font color="#990000">,</font><font color="#009900">$entry</font><font color="#990000">);</font>
      <b><font color="#3366FF">my</font></b> <font color="#009900">$published</font> <font color="#990000">=</font> <font color="#009900">$xc</font><font color="#990000">-&gt;</font> <b><font color="#000000">find</font></b><font color="#990000">(</font><font color="#CC3333">'vuln:published-datetime'</font><font color="#990000">,</font> <font color="#009900">$entry</font><font color="#990000">);</font>
      <b><font color="#3366FF">my</font></b> <font color="#009900">$modified</font> <font color="#990000">=</font> <font color="#009900">$xc</font><font color="#990000">-&gt;</font> <b><font color="#000000">find</font></b><font color="#990000">(</font><font color="#CC3333">'vuln:last-modified-datetime'</font><font color="#990000">,</font> <font color="#009900">$entry</font><font color="#990000">);</font>
      <b><font color="#3366FF">my</font></b> <font color="#009900">$summary</font> <font color="#990000">=</font> <font color="#009900">$xc</font><font color="#990000">-&gt;</font> <b><font color="#000000">find</font></b><font color="#990000">(</font><font color="#CC3333">'vuln:summary'</font><font color="#990000">,</font> <font color="#009900">$entry</font><font color="#990000">);</font>
      <b><font color="#3366FF">my</font></b> <font color="#009900">$skip</font> <font color="#990000">=</font> <font color="#993399">0</font><font color="#990000">;</font>
      <b><font color="#3366FF">my</font></b> <font color="#990000">(</font><font color="#009900">$metrics</font><font color="#990000">)</font> <font color="#990000">=</font> <font color="#009900">$xc</font><font color="#990000">-&gt;</font> <b><font color="#000000">findnodes</font></b><font color="#990000">(</font><font color="#CC3333">'vuln:cvss/cvss:base_metrics'</font><font color="#990000">,</font> <font color="#009900">$entry</font><font color="#990000">)</font> <b><font color="#000000">or</font></b> <font color="#990000">(</font><font color="#009900">$skip</font> <font color="#990000">=</font> <font color="#993399">1</font><font color="#990000">);</font>
      <b><font color="#3366FF">if</font></b> <font color="#990000">(!</font> <font color="#009900">$skip</font><font color="#990000">)</font> <font color="#CC3333">{</font>
         <b><font color="#3366FF">my</font></b> <font color="#009900">$score</font> <font color="#990000">=</font> <font color="#009900">$xc</font><font color="#990000">-&gt;</font> <b><font color="#000000">find</font></b><font color="#990000">(</font><font color="#CC3333">'cvss:score'</font><font color="#990000">,</font> <font color="#009900">$metrics</font><font color="#990000">);</font>
         <b><font color="#3366FF">my</font></b> <font color="#009900">$vector</font> <font color="#990000">=</font> <font color="#009900">$xc</font><font color="#990000">-&gt;</font> <b><font color="#000000">find</font></b><font color="#990000">(</font><font color="#CC3333">'cvss:access-vector'</font><font color="#990000">,</font> <font color="#009900">$metrics</font><font color="#990000">);</font>
         <b><font color="#3366FF">my</font></b> <font color="#009900">$complexity</font> <font color="#990000">=</font> <font color="#009900">$xc</font><font color="#990000">-&gt;</font> <b><font color="#000000">find</font></b><font color="#990000">(</font><font color="#CC3333">'cvss:access-complexity'</font><font color="#990000">,</font> <font color="#009900">$metrics</font><font color="#990000">);</font>
         <b><font color="#3366FF">my</font></b> <font color="#009900">$authentication</font> <font color="#990000">=</font> <font color="#009900">$xc</font><font color="#990000">-&gt;</font> <b><font color="#000000">find</font></b><font color="#990000">(</font><font color="#CC3333">'cvss:authentication'</font><font color="#990000">,</font> <font color="#009900">$metrics</font><font color="#990000">);</font>
         <b><font color="#3366FF">my</font></b> <font color="#009900">$confidentiality</font> <font color="#990000">=</font>
            <font color="#009900">$xc</font><font color="#990000">-&gt;</font> <b><font color="#000000">find</font></b><font color="#990000">(</font><font color="#CC3333">'cvss:confidentiality-impact'</font><font color="#990000">,</font> <font color="#009900">$metrics</font><font color="#990000">);</font>
         <b><font color="#3366FF">my</font></b> <font color="#009900">$integrity</font> <font color="#990000">=</font> <font color="#009900">$xc</font><font color="#990000">-&gt;</font> <b><font color="#000000">find</font></b><font color="#990000">(</font><font color="#CC3333">'cvss:integrity-impact'</font><font color="#990000">,</font> <font color="#009900">$metrics</font><font color="#990000">);</font>
         <b><font color="#3366FF">my</font></b> <font color="#009900">$availability</font> <font color="#990000">=</font> <font color="#009900">$xc</font><font color="#990000">-&gt;</font> <b><font color="#000000">find</font></b><font color="#990000">(</font><font color="#CC3333">'cvss:availability-impact'</font><font color="#990000">,</font> <font color="#009900">$metrics</font><font color="#990000">);</font>
         <b><font color="#3366FF">my</font></b> <font color="#009900">$severity</font> <font color="#990000">=</font> <font color="#CC3333">"LOW"</font><font color="#990000">;</font>
         <b><font color="#3366FF">if</font></b> <font color="#990000">(</font><b><font color="#3366FF">int</font></b><font color="#990000">(</font><font color="#009900">$score</font><font color="#990000">)</font> <font color="#990000">&gt;=</font> <font color="#993399">7</font><font color="#990000">)</font> <font color="#CC3333">{</font>
            <font color="#009900">$severity</font> <font color="#990000">=</font> <font color="#CC3333">"HIGH"</font><font color="#990000">;</font>
         <font color="#CC3333">}</font>
         <b><font color="#3366FF">elsif</font></b> <font color="#990000">(</font><b><font color="#3366FF">int</font></b><font color="#990000">(</font><font color="#009900">$score</font><font color="#990000">)</font> <font color="#990000">&gt;=</font> <font color="#993399">4</font><font color="#990000">)</font> <font color="#CC3333">{</font>
            <font color="#009900">$severity</font> <font color="#990000">=</font> <font color="#CC3333">"MEDIUM"</font><font color="#990000">;</font>
         <font color="#CC3333">}</font>
         <b><font color="#3366FF">my</font></b> <font color="#009900">$sql</font> <font color="#990000">=</font> <b><font color="#3366FF">qq</font></b><font color="#CC3333">{ SELECT count(*) FROM nvdcve WHERE cve_id=? }</font><font color="#990000">;</font>
         <b><font color="#3366FF">my</font></b> <font color="#009900">$sth</font> <font color="#990000">=</font> <font color="#009900">$dbh</font><font color="#990000">-&gt;</font><b><font color="#000000">prepare</font></b><font color="#990000">(</font> <font color="#009900">$sql</font> <font color="#990000">);</font>
         <b><font color="#3366FF">my</font></b> <font color="#009900">$rc</font> <font color="#990000">=</font> <font color="#009900">$sth</font><font color="#990000">-&gt;</font><b><font color="#000000">execute</font></b><font color="#990000">(</font><font color="#009900">$cve</font><font color="#990000">);</font>
         <b><font color="#3366FF">if</font></b> <font color="#990000">(</font> <font color="#009900">$rc</font><font color="#990000">)</font> <font color="#CC3333">{</font>
            <b><font color="#3366FF">my</font></b><font color="#990000">(</font><font color="#009900">$exist</font><font color="#990000">)</font> <font color="#990000">=</font> <font color="#009900">$sth</font><font color="#990000">-&gt;</font><b><font color="#000000">fetchrow_array</font></b><font color="#990000">();</font>
            <b><font color="#3366FF">if</font></b> <font color="#990000">(!</font> <font color="#009900">$exist</font><font color="#990000">)</font> <font color="#CC3333">{</font>
                <font color="#009900">$sql</font> <font color="#990000">=</font> <b><font color="#3366FF">qq</font></b><font color="#CC3333">{</font> INSERT INTO nvdcve SET cve_id<font color="#990000">=?,</font>
published<font color="#990000">=?,</font> modified<font color="#990000">=?,</font> score<font color="#990000">=?,</font> severity<font color="#990000">=?,</font> vector<font color="#990000">=?,</font> complexity<font color="#990000">=?,</font>
authentication<font color="#990000">=?,</font> confidentiality<font color="#990000">=?,</font> integrity<font color="#990000">=?,</font>availability<font color="#990000">=?,</font> summary<font color="#990000">=?</font> <font color="#CC3333">}</font><font color="#990000">;</font>
               <font color="#009900">$sth</font> <font color="#990000">=</font> <font color="#009900">$dbh</font><font color="#990000">-&gt;</font><b><font color="#000000">prepare</font></b><font color="#990000">(</font> <font color="#009900">$sql</font> <font color="#990000">);</font>
               <font color="#009900">$rc</font> <font color="#990000">=</font> <font color="#009900">$sth</font><font color="#990000">-&gt;</font><b><font color="#000000">execute</font></b><font color="#990000">(</font><font color="#009900">$cve</font><font color="#990000">,</font><font color="#009900">$published</font><font color="#990000">,</font><font color="#009900">$modified</font><font color="#990000">,</font><font color="#009900">$score</font><font color="#990000">,</font>
<font color="#009900">$severity</font><font color="#990000">,</font><font color="#009900">$vector</font><font color="#990000">,</font><font color="#009900">$complexity</font><font color="#990000">,</font><font color="#009900">$authentication</font><font color="#990000">,</font>
<font color="#009900">$confidentiality</font><font color="#990000">,</font><font color="#009900">$integrity</font><font color="#990000">,</font><font color="#009900">$availability</font><font color="#990000">,</font><font color="#009900">$summary</font><font color="#990000">);</font>
            <font color="#CC3333">}</font>
         <font color="#CC3333">}</font>
      <font color="#CC3333">}</font>
   <font color="#CC3333">}</font>
<font color="#CC3333">}</font>
</tt></pre>
</p>
<p><h4><b>The Perl Program to Pull It All Together</b></h4>
</p>
<p>
The above subroutines use the Perl modules <a href="http://search.cpan.org/~gaas/libwww-perl-5.834/lib/LWP/UserAgent.pm">LWP::UserAgent</a>, <a href="http://search.cpan.org/~pajas/XML-LibXML-1.70/LibXML.pod">XML::LibXML</a>, <a href="http://search.cpan.org/~pajas/XML-LibXML-XPathContext/">XML::LibXML::XPathContext</a>, and <a href="http://search.cpan.org/~timb/DBI-1.609/">DBI</a>. A sample Perl program that calls the above subroutines to pull down the NVD CVE data and load it into a MySQL table would be:
</p>
<p>
<!-- Generator: GNU source-highlight 3.1.3<br />
by Lorenzo Bettini</p>
<p>http://www.lorenzobettini.it</p>
<p>http://www.gnu.org/software/src-highlite --></p>
<pre><tt><i><font color="#996633">#!/usr/local/bin/perl -w</font></i>
<b><font color="#3366FF">use</font></b> LWP<font color="#990000">::</font>UserAgent<font color="#990000">;</font>
<b><font color="#3366FF">use</font></b> XML<font color="#990000">::</font>LibXML<font color="#990000">;</font>
<b><font color="#3366FF">use</font></b> XML<font color="#990000">::</font>LibXML<font color="#990000">::</font>XPathContext<font color="#990000">;</font>
<b><font color="#3366FF">use</font></b> DBI<font color="#990000">;</font>
BEGIN<font color="#CC3333">{</font><b><font color="#3366FF">push</font></b> <font color="#009900">@INC</font><font color="#990000">,</font> <font color="#CC3333">"/home/jgerber/projects/nvd/perl"</font><font color="#CC3333">}</font>
<b><font color="#3366FF">use</font></b> nvdsubs <b><font color="#3366FF">qw</font></b><font color="#990000">(</font><font color="#009900">$db_host</font> <font color="#009900">$db</font> <font color="#009900">$mysql_user</font> <font color="#009900">$mysql_passwd</font> <font color="#009900">$mysql</font><font color="#990000">.</font>sock
readpage readxml <font color="#990000">);</font>
<i><font color="#996633"># Main</font></i>
<b><font color="#3366FF">my</font></b> <font color="#009900">$datadir</font> <font color="#990000">=</font> <font color="#CC3333">"/home/johngerber/projects/nvd/data"</font><font color="#990000">;</font>
<b><font color="#3366FF">my</font></b> <font color="#009900">@timeData</font> <font color="#990000">=</font> <b><font color="#000000">localtime</font></b><font color="#990000">(</font>time<font color="#990000">);</font>
<b><font color="#3366FF">my</font></b> <font color="#009900">$year</font> <font color="#990000">=</font> <font color="#993399">1900</font> <font color="#990000">+</font> <font color="#009900">$timeData</font><font color="#990000">[</font><font color="#993399">5</font><font color="#990000">];</font>
<b><font color="#3366FF">my</font></b> <font color="#009900">$prev_year</font> <font color="#990000">=</font> <font color="#993399">1900</font> <font color="#990000">+</font> <font color="#009900">$timeData</font><font color="#990000">[</font><font color="#993399">5</font><font color="#990000">]</font> <font color="#990000">-</font> <font color="#993399">1</font><font color="#990000">;</font>
<b><font color="#3366FF">my</font></b> <font color="#009900">$url</font> <font color="#990000">=</font> <font color="#CC3333">"http://static.nvd.nist.gov/feeds/xml/cve/nvdcve-2.0-"</font> <font color="#990000">.</font>
    <font color="#009900">$year</font> <font color="#990000">.</font> <font color="#CC3333">".xml"</font><font color="#990000">;</font>
<b><font color="#3366FF">my</font></b> <font color="#009900">$prev_url</font> <font color="#990000">=</font> <font color="#CC3333">"http://static.nvd.nist.gov/feeds/xml/cve/nvdcve-2.0-"</font> <font color="#990000">.</font>
    <font color="#009900">$prev_year</font> <font color="#990000">.</font> <font color="#CC3333">".xml"</font><font color="#990000">;</font>
<b><font color="#3366FF">my</font></b> <font color="#009900">$nvd_file</font> <font color="#990000">=</font> <font color="#009900">$datadir</font>  <font color="#990000">.</font> <font color="#CC3333">"/nvdcve-"</font><font color="#990000">.</font> <font color="#009900">$year</font> <font color="#990000">.</font> <font color="#CC3333">".xml"</font><font color="#990000">;</font>
<b><font color="#3366FF">my</font></b> <font color="#009900">$prev_nvd_file</font> <font color="#990000">=</font> <font color="#009900">$datadir</font>  <font color="#990000">.</font> <font color="#CC3333">"/nvdcve-"</font><font color="#990000">.</font> <font color="#009900">$prev_year</font> <font color="#990000">.</font> <font color="#CC3333">".xml"</font><font color="#990000">;</font>
<font color="#009900">$db</font> <font color="#990000">=</font> <font color="#CC3333">"vulnerabilities"</font><font color="#990000">;</font>
<b><font color="#3366FF">local</font></b><font color="#990000">(</font><font color="#009900">$dbh</font><font color="#990000">)</font> <font color="#990000">=</font> DBI<font color="#990000">-&gt;</font><b><font color="#000000">connect</font></b><font color="#990000">(</font><font color="#CC3333">"DBI:mysql:mysql_socket=$mysql.sock;$db:$db_host"</font><font color="#990000">,</font>
<font color="#009900">$mysql_user</font><font color="#990000">,</font> <font color="#009900">$mysql_passwd</font><font color="#990000">)</font> <font color="#990000">||</font> <b><font color="#3366FF">die</font></b> <font color="#CC3333">"ERROR: Connecting: $DBI::errstr\n"</font><font color="#990000">;</font>
<b><font color="#3366FF">my</font></b> <font color="#990000">(</font><font color="#009900">$pjstatus</font><font color="#990000">)</font> <font color="#990000">=</font> <font color="#990000">&amp;</font><b><font color="#000000">readpage</font></b><font color="#990000">(</font><font color="#009900">$prev_url</font><font color="#990000">,</font><font color="#009900">$prev_nvd_file</font><font color="#990000">);</font>
<b><font color="#3366FF">if</font></b> <font color="#990000">(</font><font color="#009900">$pjstatus</font><font color="#990000">)</font> <font color="#CC3333">{</font>
   <font color="#990000">&amp;</font><b><font color="#000000">readxml</font></b><font color="#990000">(</font><font color="#009900">$prev_nvd_file</font><font color="#990000">,</font><font color="#009900">$dbh</font><font color="#990000">);</font>
<font color="#CC3333">}</font>
<font color="#009900">$pjstatus</font> <font color="#990000">=</font> <font color="#990000">&amp;</font><b><font color="#000000">readpage</font></b><font color="#990000">(</font><font color="#009900">$url</font><font color="#990000">,</font><font color="#009900">$nvd_file</font><font color="#990000">);</font>
<b><font color="#3366FF">if</font></b> <font color="#990000">(</font><font color="#009900">$pjstatus</font><font color="#990000">)</font> <font color="#CC3333">{</font>
   <font color="#990000">&amp;</font><b><font color="#000000">readxml</font></b><font color="#990000">(</font><font color="#009900">$nvd_file</font><font color="#990000">,</font><font color="#009900">$dbh</font><font color="#990000">);</font>
<font color="#CC3333">}</font>
<b><font color="#3366FF">exit</font></b><font color="#990000">;</font>
</tt></pre>
</p>
<p>
The <b>nvdsubs.pm</b> file will not be included in this post.  The subroutines are defined and the only pieces missing are the MySQL database username and password.  You don&#8217;t need mine.  Add your own.  At this point, we have everything we need to finally use Google Visualization to create a graph.
</p>
<p><h3>Google Visualization</h3>
</p>
<p>
We are going to create a Perl program that will read our MySQL nvdcve table and generate the JavaScript that will render our charts on the client&#8217;s browser.  First, we want to define the JavaScript we want to produce.  Just to alleviate some concerns, with Google Visualization your data is only shared between your server and the client connecting.  This is unlike Google Charts where your data is sent to Google where it is made into a chart and the result is sent back.  Google states concerning the logging of chart data (via Google Charts), &#8220;The chart data included in the HTTP request is saved in temporary logs for no longer than two weeks for internal testing and debugging purposes.&#8221;  Every example in the Google Visualization Gallery will state the data policy.  For Google Charts, stated at the bottom of the page for each gadget description the data policy:
</p>
<p>
<img src="http://blog.securitymonks.com/wp-content/uploads/2010/04/GoogleChartDataPolicy.png" />
</p>
<p>
While Google Visualization gadgets will have the following stated data policy:
</p>
<p>
<img src="http://blog.securitymonks.com/wp-content/uploads/2010/04/GoogleVisDataPolicy.png" />
</p>
<p><h4><b>Loading Google Libraries</b></h4>
</p>
<p>
The first thing the JavaScript needs to do is load the required libraries.  This is accomplished with the lines:
</p>
<p><pre>
&lt;script type="text/javascript" src="http://www.google.com/jsapi"&gt;&lt;/script&gt;
</pre>
</p>
<p><h4><b>Area Chart and Table</b></h4>
</p>
<p>
In this example we are going to create an <a href="http://code.google.com/apis/visualization/documentation/gallery/columnchart.html">column chart</a>. In a later section, &#8220;Other Charting Options&#8221; (see below) we define different Google Visualization charting options.
</p>
<p>
JavaScript code for a sample column chart would be:
</p>
<p>
<!-- Generator: GNU source-highlight 3.1.3<br />
by Lorenzo Bettini</p>
<p>http://www.lorenzobettini.it</p>
<p>http://www.gnu.org/software/src-highlite --></p>
<pre><tt>    <font color="#990000">&lt;</font>script type<font color="#990000">=</font><font color="#CC3333">'text/javascript'</font><font color="#990000">&gt;</font>
      google<font color="#990000">.</font><b><font color="#000000">load</font></b><font color="#990000">(</font><font color="#CC3333">'visualization'</font><font color="#990000">,</font> <font color="#CC3333">'1'</font><font color="#990000">,</font> <font color="#CC3333">{</font>packages<font color="#990000">:[</font><font color="#CC3333">'columnchart'</font><font color="#990000">]</font><font color="#CC3333">}</font><font color="#990000">);</font>
      google<font color="#990000">.</font><b><font color="#000000">setOnLoadCallback</font></b><font color="#990000">(</font>drawChart<font color="#990000">);</font>
      <b><font color="#008080">function</font></b> <b><font color="#000000">drawChart</font></b><font color="#990000">()</font> <font color="#CC3333">{</font>
        <b><font color="#008080">var</font></b> data <font color="#990000">=</font> <b><font color="#008080">new</font></b> google<font color="#990000">.</font>visualization<font color="#990000">.</font><b><font color="#000000">DataTable</font></b><font color="#990000">();</font>
        data<font color="#990000">.</font><b><font color="#000000">addColumn</font></b><font color="#990000">(</font><font color="#CC3333">'date'</font><font color="#990000">,</font> <font color="#CC3333">'Date'</font><font color="#990000">);</font>
        data<font color="#990000">.</font><b><font color="#000000">addColumn</font></b><font color="#990000">(</font><font color="#CC3333">'number'</font><font color="#990000">,</font> <font color="#CC3333">'High'</font><font color="#990000">);</font>
        data<font color="#990000">.</font><b><font color="#000000">addColumn</font></b><font color="#990000">(</font><font color="#CC3333">'number'</font><font color="#990000">,</font> <font color="#CC3333">'Medium'</font><font color="#990000">);</font>
        data<font color="#990000">.</font><b><font color="#000000">addColumn</font></b><font color="#990000">(</font><font color="#CC3333">'number'</font><font color="#990000">,</font> <font color="#CC3333">'Low'</font><font color="#990000">);</font>
        data<font color="#990000">.</font><b><font color="#000000">addRows</font></b><font color="#990000">([</font>
           <font color="#990000">[</font><b><font color="#008080">new</font></b> <b><font color="#000000">Date</font></b><font color="#990000">(</font><font color="#993399">2009</font><font color="#990000">,</font> <font color="#993399">0</font><font color="#990000">,</font> <font color="#993399">30</font><font color="#990000">),</font><font color="#993399">92</font><font color="#990000">,</font><font color="#993399">97</font><font color="#990000">,</font><font color="#993399">3</font><font color="#990000">],</font>
           <font color="#990000">[</font><b><font color="#008080">new</font></b> <b><font color="#000000">Date</font></b><font color="#990000">(</font><font color="#993399">2009</font><font color="#990000">,</font> <font color="#993399">1</font><font color="#990000">,</font> <font color="#993399">27</font><font color="#990000">),</font><font color="#993399">168</font><font color="#990000">,</font><font color="#993399">142</font><font color="#990000">,</font><font color="#993399">25</font><font color="#990000">],</font>
           <font color="#990000">[</font><b><font color="#008080">new</font></b> <b><font color="#000000">Date</font></b><font color="#990000">(</font><font color="#993399">2009</font><font color="#990000">,</font> <font color="#993399">2</font><font color="#990000">,</font> <font color="#993399">31</font><font color="#990000">),</font><font color="#993399">141</font><font color="#990000">,</font><font color="#993399">165</font><font color="#990000">,</font><font color="#993399">9</font><font color="#990000">],</font>
           <font color="#990000">[</font><b><font color="#008080">new</font></b> <b><font color="#000000">Date</font></b><font color="#990000">(</font><font color="#993399">2009</font><font color="#990000">,</font> <font color="#993399">3</font><font color="#990000">,</font> <font color="#993399">30</font><font color="#990000">),</font><font color="#993399">132</font><font color="#990000">,</font><font color="#993399">203</font><font color="#990000">,</font><font color="#993399">12</font><font color="#990000">],</font>
           <font color="#990000">[</font><b><font color="#008080">new</font></b> <b><font color="#000000">Date</font></b><font color="#990000">(</font><font color="#993399">2009</font><font color="#990000">,</font> <font color="#993399">4</font><font color="#990000">,</font> <font color="#993399">29</font><font color="#990000">),</font><font color="#993399">158</font><font color="#990000">,</font><font color="#993399">153</font><font color="#990000">,</font><font color="#993399">8</font><font color="#990000">],</font>
           <font color="#990000">[</font><b><font color="#008080">new</font></b> <b><font color="#000000">Date</font></b><font color="#990000">(</font><font color="#993399">2009</font><font color="#990000">,</font> <font color="#993399">5</font><font color="#990000">,</font> <font color="#993399">30</font><font color="#990000">),</font><font color="#993399">200</font><font color="#990000">,</font><font color="#993399">199</font><font color="#990000">,</font><font color="#993399">22</font><font color="#990000">],</font>
           <font color="#990000">[</font><b><font color="#008080">new</font></b> <b><font color="#000000">Date</font></b><font color="#990000">(</font><font color="#993399">2009</font><font color="#990000">,</font> <font color="#993399">6</font><font color="#990000">,</font> <font color="#993399">31</font><font color="#990000">),</font><font color="#993399">190</font><font color="#990000">,</font><font color="#993399">195</font><font color="#990000">,</font><font color="#993399">11</font><font color="#990000">],</font>
           <font color="#990000">[</font><b><font color="#008080">new</font></b> <b><font color="#000000">Date</font></b><font color="#990000">(</font><font color="#993399">2009</font><font color="#990000">,</font> <font color="#993399">7</font><font color="#990000">,</font> <font color="#993399">31</font><font color="#990000">),</font><font color="#993399">127</font><font color="#990000">,</font><font color="#993399">139</font><font color="#990000">,</font><font color="#993399">14</font><font color="#990000">],</font>
           <font color="#990000">[</font><b><font color="#008080">new</font></b> <b><font color="#000000">Date</font></b><font color="#990000">(</font><font color="#993399">2009</font><font color="#990000">,</font> <font color="#993399">8</font><font color="#990000">,</font> <font color="#993399">30</font><font color="#990000">),</font><font color="#993399">233</font><font color="#990000">,</font><font color="#993399">208</font><font color="#990000">,</font><font color="#993399">14</font><font color="#990000">],</font>
           <font color="#990000">[</font><b><font color="#008080">new</font></b> <b><font color="#000000">Date</font></b><font color="#990000">(</font><font color="#993399">2009</font><font color="#990000">,</font> <font color="#993399">9</font><font color="#990000">,</font> <font color="#993399">30</font><font color="#990000">),</font><font color="#993399">163</font><font color="#990000">,</font><font color="#993399">167</font><font color="#990000">,</font><font color="#993399">18</font><font color="#990000">],</font>
           <font color="#990000">[</font><b><font color="#008080">new</font></b> <b><font color="#000000">Date</font></b><font color="#990000">(</font><font color="#993399">2009</font><font color="#990000">,</font> <font color="#993399">10</font><font color="#990000">,</font> <font color="#993399">30</font><font color="#990000">),</font><font color="#993399">129</font><font color="#990000">,</font><font color="#993399">172</font><font color="#990000">,</font><font color="#993399">8</font><font color="#990000">],</font>
           <font color="#990000">[</font><b><font color="#008080">new</font></b> <b><font color="#000000">Date</font></b><font color="#990000">(</font><font color="#993399">2009</font><font color="#990000">,</font> <font color="#993399">11</font><font color="#990000">,</font> <font color="#993399">31</font><font color="#990000">),</font><font color="#993399">200</font><font color="#990000">,</font><font color="#993399">211</font><font color="#990000">,</font><font color="#993399">19</font><font color="#990000">],</font>
           <font color="#990000">[</font><b><font color="#008080">new</font></b> <b><font color="#000000">Date</font></b><font color="#990000">(</font><font color="#993399">2010</font><font color="#990000">,</font> <font color="#993399">0</font><font color="#990000">,</font> <font color="#993399">29</font><font color="#990000">),</font><font color="#993399">157</font><font color="#990000">,</font><font color="#993399">139</font><font color="#990000">,</font><font color="#993399">14</font><font color="#990000">],</font>
           <font color="#990000">[</font><b><font color="#008080">new</font></b> <b><font color="#000000">Date</font></b><font color="#990000">(</font><font color="#993399">2010</font><font color="#990000">,</font> <font color="#993399">1</font><font color="#990000">,</font> <font color="#993399">26</font><font color="#990000">),</font><font color="#993399">137</font><font color="#990000">,</font><font color="#993399">143</font><font color="#990000">,</font><font color="#993399">12</font><font color="#990000">],</font>
           <font color="#990000">[</font><b><font color="#008080">new</font></b> <b><font color="#000000">Date</font></b><font color="#990000">(</font><font color="#993399">2010</font><font color="#990000">,</font> <font color="#993399">2</font><font color="#990000">,</font> <font color="#993399">31</font><font color="#990000">),</font><font color="#993399">252</font><font color="#990000">,</font><font color="#993399">242</font><font color="#990000">,</font><font color="#993399">18</font><font color="#990000">],</font>
           <font color="#990000">[</font><b><font color="#008080">new</font></b> <b><font color="#000000">Date</font></b><font color="#990000">(</font><font color="#993399">2010</font><font color="#990000">,</font> <font color="#993399">3</font><font color="#990000">,</font> <font color="#993399">13</font><font color="#990000">),</font><font color="#993399">92</font><font color="#990000">,</font><font color="#993399">118</font><font color="#990000">,</font><font color="#993399">17</font><font color="#990000">]</font>
        <font color="#990000">]);</font>
        <b><font color="#008080">var</font></b> chart <font color="#990000">=</font> <b><font color="#008080">new</font></b> google<font color="#990000">.</font>visualization<font color="#990000">.</font><b><font color="#000000">ColumnChart</font></b><font color="#990000">(</font>document<font color="#990000">.</font><b><font color="#000000">getElementById</font></b><font color="#990000">(</font><font color="#CC3333">'s4graph'</font><font color="#990000">));</font>
        chart<font color="#990000">.</font><b><font color="#000000">draw</font></b><font color="#990000">(</font>data<font color="#990000">,</font> <font color="#CC3333">{</font>displayAnnotations<font color="#990000">:</font><b><font color="#008080">true</font></b><font color="#990000">,</font> is3D<font color="#990000">:</font> <b><font color="#008080">true</font></b><font color="#990000">,</font> isStacked<font color="#990000">:</font> <b><font color="#008080">true</font></b><font color="#990000">,</font> min<font color="#990000">:</font> <font color="#993399">0</font><font color="#990000">,</font>
          allowHtml<font color="#990000">:</font> <b><font color="#008080">true</font></b><font color="#990000">,</font> colors<font color="#990000">:[</font><font color="#CC3333">{</font>color<font color="#990000">:</font><font color="#CC3333">'#E41B17'</font><font color="#990000">,</font> darker<font color="#990000">:</font><font color="#CC3333">'#C11B17'</font><font color="#CC3333">}</font><font color="#990000">,</font> <font color="#CC3333">{</font>color<font color="#990000">:</font><font color="#CC3333">'#FFA500'</font><font color="#990000">,</font> darker<font color="#990000">:</font><font color="#CC3333">'#E56717'</font><font color="#CC3333">}</font><font color="#990000">,</font> <font color="#CC3333">{</font>color<font color="#990000">:</font><font color="#CC3333">'#FFE87C'</font><font color="#990000">,</font> darker<font color="#990000">:</font><font color="#CC3333">'#C8B560'</font><font color="#CC3333">}</font><font color="#990000">]</font><font color="#CC3333">}</font><font color="#990000">);</font>
      <font color="#CC3333">}</font>
    <font color="#990000">&lt;/</font>script<font color="#990000">&gt;</font>
</tt></pre>
</p>
<p>
The resulting image would be the following column chart:
</p>
<p>
<img src="http://blog.securitymonks.com/wp-content/uploads/2010/04/googlecolumn.png"  width=500 />
</p>
<p><h4><b>Rendering the Table</b></h4>
</p>
<p>
When providing qualitative results, I like to back them up with more accurate numeric values.  Let us include a table with links to the CVSS scores for each vulnerability.
</p>
<p>
<!-- Generator: GNU source-highlight 3.1.3<br />
by Lorenzo Bettini</p>
<p>http://www.lorenzobettini.it</p>
<p>http://www.gnu.org/software/src-highlite --></p>
<pre><tt>    <font color="#990000">&lt;</font>script type<font color="#990000">=</font><font color="#CC3333">'text/javascript'</font><font color="#990000">&gt;</font>
      google<font color="#990000">.</font><b><font color="#000000">load</font></b><font color="#990000">(</font><font color="#CC3333">'visualization'</font><font color="#990000">,</font> <font color="#CC3333">'1'</font><font color="#990000">,</font> <font color="#CC3333">{</font>packages<font color="#990000">:[</font><font color="#CC3333">'table'</font><font color="#990000">]</font><font color="#CC3333">}</font><font color="#990000">);</font>
      google<font color="#990000">.</font><b><font color="#000000">setOnLoadCallback</font></b><font color="#990000">(</font>drawChart<font color="#990000">);</font>
      <b><font color="#3366FF">function</font></b> <b><font color="#000000">drawChart</font></b><font color="#990000">()</font> <font color="#CC3333">{</font>
        <b><font color="#3366FF">var</font></b> data2 <font color="#990000">=</font> <b><font color="#3366FF">new</font></b> google<font color="#990000">.</font>visualization<font color="#990000">.</font><b><font color="#000000">DataTable</font></b><font color="#990000">();</font>
        data2<font color="#990000">.</font><b><font color="#000000">addColumn</font></b><font color="#990000">(</font><font color="#CC3333">'date'</font><font color="#990000">,</font> <font color="#CC3333">'Date'</font><font color="#990000">);</font>
        data2<font color="#990000">.</font><b><font color="#000000">addColumn</font></b><font color="#990000">(</font><font color="#CC3333">'number'</font><font color="#990000">,</font> <font color="#CC3333">'High'</font><font color="#990000">);</font>
        data2<font color="#990000">.</font><b><font color="#000000">addColumn</font></b><font color="#990000">(</font><font color="#CC3333">'number'</font><font color="#990000">,</font> <font color="#CC3333">'Medium'</font><font color="#990000">);</font>
        data2<font color="#990000">.</font><b><font color="#000000">addColumn</font></b><font color="#990000">(</font><font color="#CC3333">'number'</font><font color="#990000">,</font> <font color="#CC3333">'Low'</font><font color="#990000">);</font>
        data2<font color="#990000">.</font><b><font color="#000000">addRows</font></b><font color="#990000">([</font>
           <font color="#990000">[</font><font color="#CC3333">{</font>v<font color="#990000">:</font><b><font color="#3366FF">new</font></b> <b><font color="#000000">Date</font></b><font color="#990000">(</font><font color="#993399">2009</font><font color="#990000">,</font> <font color="#993399">0</font><font color="#990000">,</font> <font color="#993399">30</font><font color="#990000">),</font>
              f<font color="#990000">:</font><font color="#CC3333">'&lt;a href="/nvd/cvealerts.php?date=2009-01"&gt;2009-01-30&lt;/a&gt;'</font><font color="#CC3333">}</font><font color="#990000">,</font> <font color="#993399">92</font><font color="#990000">,</font><font color="#993399">97</font><font color="#990000">,</font><font color="#993399">3</font><font color="#990000">],</font>
           <font color="#990000">[</font><font color="#CC3333">{</font>v<font color="#990000">:</font><b><font color="#3366FF">new</font></b> <b><font color="#000000">Date</font></b><font color="#990000">(</font><font color="#993399">2009</font><font color="#990000">,</font> <font color="#993399">1</font><font color="#990000">,</font> <font color="#993399">27</font><font color="#990000">),</font>
              f<font color="#990000">:</font><font color="#CC3333">'&lt;a href="/nvd/cvealerts.php?date=2009-02"&gt;2009-02-27&lt;/a&gt;'</font><font color="#CC3333">}</font><font color="#990000">,</font> <font color="#993399">168</font><font color="#990000">,</font><font color="#993399">142</font><font color="#990000">,</font><font color="#993399">25</font><font color="#990000">],</font>
           <font color="#990000">[</font><font color="#CC3333">{</font>v<font color="#990000">:</font><b><font color="#3366FF">new</font></b> <b><font color="#000000">Date</font></b><font color="#990000">(</font><font color="#993399">2009</font><font color="#990000">,</font> <font color="#993399">2</font><font color="#990000">,</font> <font color="#993399">31</font><font color="#990000">),</font>
              f<font color="#990000">:</font><font color="#CC3333">'&lt;a href="/nvd/cvealerts.php?date=2009-03"&gt;2009-03-31&lt;/a&gt;'</font><font color="#CC3333">}</font><font color="#990000">,</font> <font color="#993399">141</font><font color="#990000">,</font><font color="#993399">165</font><font color="#990000">,</font><font color="#993399">9</font><font color="#990000">],</font>
           <font color="#990000">[</font><font color="#CC3333">{</font>v<font color="#990000">:</font><b><font color="#3366FF">new</font></b> <b><font color="#000000">Date</font></b><font color="#990000">(</font><font color="#993399">2009</font><font color="#990000">,</font> <font color="#993399">3</font><font color="#990000">,</font> <font color="#993399">30</font><font color="#990000">),</font>
              f<font color="#990000">:</font><font color="#CC3333">'&lt;a href="/nvd/cvealerts.php?date=2009-04"&gt;2009-04-30&lt;/a&gt;'</font><font color="#CC3333">}</font><font color="#990000">,</font> <font color="#993399">132</font><font color="#990000">,</font><font color="#993399">203</font><font color="#990000">,</font><font color="#993399">12</font><font color="#990000">],</font>
           <font color="#990000">[</font><font color="#CC3333">{</font>v<font color="#990000">:</font><b><font color="#3366FF">new</font></b> <b><font color="#000000">Date</font></b><font color="#990000">(</font><font color="#993399">2009</font><font color="#990000">,</font> <font color="#993399">4</font><font color="#990000">,</font> <font color="#993399">29</font><font color="#990000">),</font>
              f<font color="#990000">:</font><font color="#CC3333">'&lt;a href="/nvd/cvealerts.php?date=2009-05"&gt;2009-05-29&lt;/a&gt;'</font><font color="#CC3333">}</font><font color="#990000">,</font> <font color="#993399">158</font><font color="#990000">,</font><font color="#993399">153</font><font color="#990000">,</font><font color="#993399">8</font><font color="#990000">],</font>
           <font color="#990000">[</font><font color="#CC3333">{</font>v<font color="#990000">:</font><b><font color="#3366FF">new</font></b> <b><font color="#000000">Date</font></b><font color="#990000">(</font><font color="#993399">2009</font><font color="#990000">,</font> <font color="#993399">5</font><font color="#990000">,</font> <font color="#993399">30</font><font color="#990000">),</font>
              f<font color="#990000">:</font><font color="#CC3333">'&lt;a href="/nvd/cvealerts.php?date=2009-06"&gt;2009-06-30&lt;/a&gt;'</font><font color="#CC3333">}</font><font color="#990000">,</font> <font color="#993399">200</font><font color="#990000">,</font><font color="#993399">199</font><font color="#990000">,</font><font color="#993399">22</font><font color="#990000">],</font>
           <font color="#990000">[</font><font color="#CC3333">{</font>v<font color="#990000">:</font><b><font color="#3366FF">new</font></b> <b><font color="#000000">Date</font></b><font color="#990000">(</font><font color="#993399">2009</font><font color="#990000">,</font> <font color="#993399">6</font><font color="#990000">,</font> <font color="#993399">31</font><font color="#990000">),</font>
              f<font color="#990000">:</font><font color="#CC3333">'&lt;a href="/nvd/cvealerts.php?date=2009-07"&gt;2009-07-31&lt;/a&gt;'</font><font color="#CC3333">}</font><font color="#990000">,</font> <font color="#993399">190</font><font color="#990000">,</font><font color="#993399">195</font><font color="#990000">,</font><font color="#993399">11</font><font color="#990000">],</font>
           <font color="#990000">[</font><font color="#CC3333">{</font>v<font color="#990000">:</font><b><font color="#3366FF">new</font></b> <b><font color="#000000">Date</font></b><font color="#990000">(</font><font color="#993399">2009</font><font color="#990000">,</font> <font color="#993399">7</font><font color="#990000">,</font> <font color="#993399">31</font><font color="#990000">),</font>
              f<font color="#990000">:</font><font color="#CC3333">'&lt;a href="/nvd/cvealerts.php?date=2009-08"&gt;2009-08-31&lt;/a&gt;'</font><font color="#CC3333">}</font><font color="#990000">,</font> <font color="#993399">127</font><font color="#990000">,</font><font color="#993399">139</font><font color="#990000">,</font><font color="#993399">14</font><font color="#990000">],</font>
           <font color="#990000">[</font><font color="#CC3333">{</font>v<font color="#990000">:</font><b><font color="#3366FF">new</font></b> <b><font color="#000000">Date</font></b><font color="#990000">(</font><font color="#993399">2009</font><font color="#990000">,</font> <font color="#993399">8</font><font color="#990000">,</font> <font color="#993399">30</font><font color="#990000">),</font>
              f<font color="#990000">:</font><font color="#CC3333">'&lt;a href="/nvd/cvealerts.php?date=2009-09"&gt;2009-09-30&lt;/a&gt;'</font><font color="#CC3333">}</font><font color="#990000">,</font> <font color="#993399">233</font><font color="#990000">,</font><font color="#993399">208</font><font color="#990000">,</font><font color="#993399">14</font><font color="#990000">],</font>
           <font color="#990000">[</font><font color="#CC3333">{</font>v<font color="#990000">:</font><b><font color="#3366FF">new</font></b> <b><font color="#000000">Date</font></b><font color="#990000">(</font><font color="#993399">2009</font><font color="#990000">,</font> <font color="#993399">9</font><font color="#990000">,</font> <font color="#993399">30</font><font color="#990000">),</font>
              f<font color="#990000">:</font><font color="#CC3333">'&lt;a href="/nvd/cvealerts.php?date=2009-10"&gt;2009-10-30&lt;/a&gt;'</font><font color="#CC3333">}</font><font color="#990000">,</font> <font color="#993399">163</font><font color="#990000">,</font><font color="#993399">167</font><font color="#990000">,</font><font color="#993399">18</font><font color="#990000">],</font>
           <font color="#990000">[</font><font color="#CC3333">{</font>v<font color="#990000">:</font><b><font color="#3366FF">new</font></b> <b><font color="#000000">Date</font></b><font color="#990000">(</font><font color="#993399">2009</font><font color="#990000">,</font> <font color="#993399">10</font><font color="#990000">,</font> <font color="#993399">30</font><font color="#990000">),</font>
              f<font color="#990000">:</font><font color="#CC3333">'&lt;a href="/nvd/cvealerts.php?date=2009-11"&gt;2009-11-30&lt;/a&gt;'</font><font color="#CC3333">}</font><font color="#990000">,</font> <font color="#993399">129</font><font color="#990000">,</font><font color="#993399">172</font><font color="#990000">,</font><font color="#993399">8</font><font color="#990000">],</font>
           <font color="#990000">[</font><font color="#CC3333">{</font>v<font color="#990000">:</font><b><font color="#3366FF">new</font></b> <b><font color="#000000">Date</font></b><font color="#990000">(</font><font color="#993399">2009</font><font color="#990000">,</font> <font color="#993399">11</font><font color="#990000">,</font> <font color="#993399">31</font><font color="#990000">),</font>
              f<font color="#990000">:</font><font color="#CC3333">'&lt;a href="/nvd/cvealerts.php?date=2009-12"&gt;2009-12-31&lt;/a&gt;'</font><font color="#CC3333">}</font><font color="#990000">,</font> <font color="#993399">200</font><font color="#990000">,</font><font color="#993399">211</font><font color="#990000">,</font><font color="#993399">19</font><font color="#990000">],</font>
           <font color="#990000">[</font><font color="#CC3333">{</font>v<font color="#990000">:</font><b><font color="#3366FF">new</font></b> <b><font color="#000000">Date</font></b><font color="#990000">(</font><font color="#993399">2010</font><font color="#990000">,</font> <font color="#993399">0</font><font color="#990000">,</font> <font color="#993399">29</font><font color="#990000">),</font>
              f<font color="#990000">:</font><font color="#CC3333">'&lt;a href="/nvd/cvealerts.php?date=2010-01"&gt;2010-01-29&lt;/a&gt;'</font><font color="#CC3333">}</font><font color="#990000">,</font> <font color="#993399">157</font><font color="#990000">,</font><font color="#993399">139</font><font color="#990000">,</font><font color="#993399">14</font><font color="#990000">],</font>
           <font color="#990000">[</font><font color="#CC3333">{</font>v<font color="#990000">:</font><b><font color="#3366FF">new</font></b> <b><font color="#000000">Date</font></b><font color="#990000">(</font><font color="#993399">2010</font><font color="#990000">,</font> <font color="#993399">1</font><font color="#990000">,</font> <font color="#993399">26</font><font color="#990000">),</font>
              f<font color="#990000">:</font><font color="#CC3333">'&lt;a href="/nvd/cvealerts.php?date=2010-02"&gt;2010-02-26&lt;/a&gt;'</font><font color="#CC3333">}</font><font color="#990000">,</font> <font color="#993399">137</font><font color="#990000">,</font><font color="#993399">143</font><font color="#990000">,</font><font color="#993399">12</font><font color="#990000">],</font>
           <font color="#990000">[</font><font color="#CC3333">{</font>v<font color="#990000">:</font><b><font color="#3366FF">new</font></b> <b><font color="#000000">Date</font></b><font color="#990000">(</font><font color="#993399">2010</font><font color="#990000">,</font> <font color="#993399">2</font><font color="#990000">,</font> <font color="#993399">31</font><font color="#990000">),</font>
              f<font color="#990000">:</font><font color="#CC3333">'&lt;a href="/nvd/cvealerts.php?date=2010-03"&gt;2010-03-31&lt;/a&gt;'</font><font color="#CC3333">}</font><font color="#990000">,</font> <font color="#993399">252</font><font color="#990000">,</font><font color="#993399">242</font><font color="#990000">,</font><font color="#993399">18</font><font color="#990000">],</font>
           <font color="#990000">[</font><font color="#CC3333">{</font>v<font color="#990000">:</font><b><font color="#3366FF">new</font></b> <b><font color="#000000">Date</font></b><font color="#990000">(</font><font color="#993399">2010</font><font color="#990000">,</font> <font color="#993399">3</font><font color="#990000">,</font> <font color="#993399">13</font><font color="#990000">),</font>
              f<font color="#990000">:</font><font color="#CC3333">'&lt;a href="/nvd/cvealerts.php?date=2010-04"&gt;2010-04-13&lt;/a&gt;'</font><font color="#CC3333">}</font><font color="#990000">,</font> <font color="#993399">92</font><font color="#990000">,</font><font color="#993399">118</font><font color="#990000">,</font><font color="#993399">17</font><font color="#990000">],</font>
        <font color="#990000">]);</font>
        <b><font color="#3366FF">var</font></b> table <font color="#990000">=</font> <b><font color="#3366FF">new</font></b> google<font color="#990000">.</font>visualization<font color="#990000">.</font><b><font color="#000000">Table</font></b><font color="#990000">(</font>document<font color="#990000">.</font><b><font color="#000000">getElementById</font></b><font color="#990000">(</font><font color="#CC3333">'s4graph_tab'</font><font color="#990000">));</font>
        table<font color="#990000">.</font><b><font color="#000000">draw</font></b><font color="#990000">(</font>data2<font color="#990000">,</font> <font color="#CC3333">{</font>showRowNumber<font color="#990000">:</font> <b><font color="#3366FF">true</font></b><font color="#990000">,</font> sortAscending<font color="#990000">:</font> <b><font color="#3366FF">false</font></b><font color="#990000">,</font> sortColumn<font color="#990000">:</font> <font color="#993399">0</font><font color="#990000">,</font> allowHtml<font color="#990000">:</font> <b><font color="#3366FF">true</font></b><font color="#CC3333">}</font><font color="#990000">);</font>
      <font color="#CC3333">}</font>
    <font color="#990000">&lt;/</font>script<font color="#990000">&gt;</font>
</tt></pre>
</p>
<p>
The JavaScript code assumes there is a PHP program called <b>cvealerts.php</b> under the <b>/nvd</b> directory on your web server.  Adjust to your environment.  A sample PHP program that could be used for cvealerts.php is provided below.  The resulting table chart would look like:
</p>
<p>
<img src="http://blog.securitymonks.com/wp-content/uploads/2010/04/googletable.png" width=500 />
</p>
<p><h4><b>Handling Events: Interactions Between Graphs</b></h4>
</p>
<p>
We now have two different types of graphs representing the same data.  We want to add interaction between the graphs so the viewer can see the relationship.  With tables rows are selected when the user clicks, which correspond to the whole column of the stacked column chart.  It is not a perfect fit, but it does demonstrate nicely use of adding interactions.
</p>
<p>
<!-- Generator: GNU source-highlight 3.1.3<br />
by Lorenzo Bettini</p>
<p>http://www.lorenzobettini.it</p>
<p>http://www.gnu.org/software/src-highlite --></p>
<pre><tt>        <i><font color="#996633">// Set a 'select' event listener for the table.</font></i>
        <i><font color="#996633">// When the table is selected,</font></i>
        <i><font color="#996633">// we set the selection on the line graph.</font></i>
        google<font color="#990000">.</font>visualization<font color="#990000">.</font>events<font color="#990000">.</font><b><font color="#000000">addListener</font></b><font color="#990000">(</font>table<font color="#990000">,</font> <font color="#CC3333">'select'</font><font color="#990000">,</font> <b><font color="#3366FF">function</font></b><font color="#990000">()</font> <font color="#CC3333">{</font>
          chart<font color="#990000">.</font><b><font color="#000000">setSelection</font></b><font color="#990000">([</font><font color="#CC3333">{</font>row<font color="#990000">:</font> table<font color="#990000">.</font><b><font color="#000000">getSelection</font></b><font color="#990000">()[</font><font color="#993399">0</font><font color="#990000">].</font>row<font color="#990000">,</font> column<font color="#990000">:</font> <font color="#993399">1</font><font color="#CC3333">}</font><font color="#990000">]);</font>
         <font color="#CC3333">}</font><font color="#990000">);</font>
        <i><font color="#996633">// Set a 'select' event listener for the graph.</font></i>
        <i><font color="#996633">// When the graph is selected,</font></i>
        <i><font color="#996633">// we set the selection on the table.</font></i>
        google<font color="#990000">.</font>visualization<font color="#990000">.</font>events<font color="#990000">.</font><b><font color="#000000">addListener</font></b><font color="#990000">(</font>chart<font color="#990000">,</font> <font color="#CC3333">'select'</font><font color="#990000">,</font> <b><font color="#3366FF">function</font></b><font color="#990000">()</font> <font color="#CC3333">{</font>
           table<font color="#990000">.</font><b><font color="#000000">setSelection</font></b><font color="#990000">([</font><font color="#CC3333">{</font>row<font color="#990000">:</font> chart<font color="#990000">.</font><b><font color="#000000">getSelection</font></b><font color="#990000">()[</font><font color="#993399">0</font><font color="#990000">].</font>row<font color="#CC3333">}</font><font color="#990000">]);</font>
        <font color="#CC3333">}</font><font color="#990000">);</font>
</tt></pre>
</p>
<p><h4><b>Providing Detailed Information</b></h4>
</p>
<p>
When the table chart link is clicked, we would like to provide some detailed information about the vulnerability.  For this example, we will do this with a simple PHP program placed in the /nvd directory on the web server.  The program is called cvealerts.php.
</p>
<p>
<!-- Generator: GNU source-highlight 3.1.3<br />
by Lorenzo Bettini</p>
<p>http://www.lorenzobettini.it</p>
<p>http://www.gnu.org/software/src-highlite --></p>
<pre><tt><font color="#990000">&lt;?</font>
<b><font color="#000000">session_start</font></b><font color="#990000">();</font>
<b><font color="#3366FF">function</font></b> <b><font color="#000000">db_connect</font></b><font color="#990000">(</font><font color="#009900">$table</font><font color="#990000">)</font> <font color="#CC3333">{</font>
   <font color="#009900">$result</font> <font color="#990000">=</font> <b><font color="#000000">mysql_pconnect</font></b><font color="#990000">(</font><font color="#CC3333">"&lt;dbhost&gt;:&lt;dbport&gt;"</font><font color="#990000">,</font> <font color="#CC3333">"&lt;username&gt;"</font><font color="#990000">,</font> <font color="#CC3333">"&lt;password&gt;"</font><font color="#990000">);</font>
   <b><font color="#3366FF">if</font></b> <font color="#990000">(!</font><font color="#009900">$result</font><font color="#990000">)</font> <b><font color="#3366FF">return</font></b> false<font color="#990000">;</font>
   <b><font color="#3366FF">if</font></b> <font color="#990000">(!</font><b><font color="#000000">mysql_select_db</font></b><font color="#990000">(</font><font color="#009900">$table</font><font color="#990000">))</font> <b><font color="#3366FF">return</font></b> false<font color="#990000">;</font>
   <b><font color="#3366FF">return</font></b> <font color="#009900">$result</font><font color="#990000">;</font>
<font color="#CC3333">}</font>
<b><font color="#3366FF">function</font></b> <b><font color="#000000">do_html_header</font></b><font color="#990000">(</font><font color="#009900">$title</font><font color="#990000">,</font><font color="#009900">$checkuser</font><font color="#990000">,</font><font color="#009900">$logpage</font><font color="#990000">)</font> <font color="#CC3333">{</font>
<font color="#990000">?&gt;</font>
  <font color="#990000">&lt;</font>html<font color="#990000">&gt;</font> <font color="#990000">&lt;</font>head<font color="#990000">&gt;</font> <font color="#990000">&lt;</font>title<font color="#990000">&gt;&lt;?=</font><font color="#009900">$title</font><font color="#990000">?&gt;&lt;/</font>title<font color="#990000">&gt;&lt;/</font>head<font color="#990000">&gt;</font>
  <font color="#990000">&lt;</font>body bgcolor<font color="#990000">=</font><font color="#CC3333">"#FFFFFF"</font><font color="#990000">&gt;</font>
<font color="#990000">&lt;?</font>
<font color="#CC3333">}</font>
<b><font color="#3366FF">function</font></b> <b><font color="#000000">do_html_footer</font></b><font color="#990000">()</font> <font color="#CC3333">{</font>
<font color="#990000">?&gt;</font>
<font color="#990000">&lt;</font>table<font color="#990000">&gt;</font>
<font color="#990000">&lt;</font>tr<font color="#990000">&gt;&lt;</font>td ALIGN<font color="#990000">=</font>CENTER NOWRAP WIDTH<font color="#990000">=</font><font color="#CC3333">"590"</font><font color="#990000">&gt;&lt;/</font>font<font color="#990000">&gt;</font>
<font color="#990000">&lt;</font>font face<font color="#990000">=</font><font color="#CC3333">"Verdana, Arial, Helvetica"</font> size<font color="#990000">=-</font><font color="#993399">2</font><font color="#990000">&gt;</font>Notice to Users<font color="#990000">:</font> Use
of this system constitutes consent to security monitoring <b><font color="#3366FF">and</font></b> testing<font color="#990000">.</font>
<font color="#990000">&lt;</font>br<font color="#990000">&gt;</font>All activity is logged with your host name <b><font color="#3366FF">and</font></b> IP address<font color="#990000">.&lt;/</font>font<font color="#990000">&gt;</font>
<font color="#990000">&lt;/</font>td<font color="#990000">&gt;&lt;/</font>tr<font color="#990000">&gt;</font>
<font color="#990000">&lt;/</font>table<font color="#990000">&gt;</font>
<font color="#990000">&lt;/</font>body<font color="#990000">&gt;</font>
 <font color="#990000">&lt;/</font>html<font color="#990000">&gt;</font>
<font color="#990000">&lt;?</font>
<font color="#CC3333">}</font>
<i><font color="#996633">// Main</font></i>
<font color="#009900">$dates</font><font color="#990000">=</font> <b><font color="#3366FF">array</font></b><font color="#990000">();</font>
<font color="#009900">$stringlist</font> <font color="#990000">=</font> <font color="#CC3333">""</font><font color="#990000">;</font>
<b><font color="#3366FF">if</font></b> <font color="#990000">(</font><b><font color="#3366FF">isset</font></b><font color="#990000">(</font><font color="#009900">$_GET</font><font color="#990000">[</font><font color="#CC3333">'date'</font><font color="#990000">]))</font> <font color="#CC3333">{</font>
    <font color="#009900">$passdates</font> <font color="#990000">=</font> <b><font color="#000000">explode</font></b><font color="#990000">(</font><font color="#CC3333">","</font><font color="#990000">,</font><font color="#009900">$_GET</font><font color="#990000">[</font><font color="#CC3333">'date'</font><font color="#990000">]);</font>
    <b><font color="#3366FF">for</font></b> <font color="#990000">(</font><font color="#009900">$index</font><font color="#990000">=</font><font color="#993399">0</font><font color="#990000">;</font> <font color="#009900">$index</font><font color="#990000">&lt;</font><b><font color="#000000">count</font></b><font color="#990000">(</font><font color="#009900">$passdates</font><font color="#990000">);</font> <font color="#009900">$index</font><font color="#990000">++)</font> <font color="#CC3333">{</font>
       <b><font color="#000000">array_push</font></b><font color="#990000">(</font><font color="#009900">$dates</font><font color="#990000">,</font> <font color="#009900">$passdates</font><font color="#990000">[</font><font color="#009900">$index</font><font color="#990000">]);</font>
       <font color="#009900">$stringlist</font> <font color="#990000">.=</font> <font color="#009900">$passdates</font><font color="#990000">[</font><font color="#009900">$index</font><font color="#990000">]</font> <font color="#990000">.</font> <font color="#CC3333">" "</font><font color="#990000">;</font>
    <font color="#CC3333">}</font>
<font color="#CC3333">}</font>
<b><font color="#3366FF">else</font></b> <font color="#CC3333">{</font>
  <b><font color="#3366FF">print</font></b><font color="#990000">(</font><font color="#CC3333">"Confusion over how you arrived at this page.&lt;P&gt;\n"</font><font color="#990000">);</font>
  <b><font color="#3366FF">exit</font></b><font color="#990000">;</font>
<font color="#CC3333">}</font>
<font color="#009900">$stringlist</font> <font color="#990000">=</font> <b><font color="#000000">preg_replace</font></b><font color="#990000">(</font><font color="#CC3333">"/ $/"</font><font color="#990000">,</font> <font color="#CC3333">""</font><font color="#990000">,</font><font color="#009900">$stringlist</font><font color="#990000">);</font>
<b><font color="#000000">do_html_header</font></b><font color="#990000">(</font><font color="#CC3333">"Review NVD CVE Announcements for Month Ending $stringlist"</font><font color="#990000">,</font><font color="#993399">1</font><font color="#990000">,</font><font color="#993399">1</font><font color="#990000">);</font>
<font color="#009900">$nvd_host</font> <font color="#990000">=</font> <font color="#CC3333">"http://web.nvd.nist.gov/view/vuln/detail?vulnId="</font><font color="#990000">;</font>
<font color="#009900">$conn</font> <font color="#990000">=</font> <b><font color="#000000">db_connect</font></b><font color="#990000">(</font><font color="#CC3333">"vulnerabilities"</font><font color="#990000">);</font>
<b><font color="#3366FF">if</font></b> <font color="#990000">(!</font><font color="#009900">$conn</font><font color="#990000">)</font>
   <b><font color="#000000">logit</font></b><font color="#990000">(</font><font color="#CC3333">"Could not connect to database vulnerabilities - please try later.\n"</font><font color="#990000">,</font><font color="#993399">1</font><font color="#990000">);</font>
<b><font color="#3366FF">for</font></b> <font color="#990000">(</font><font color="#009900">$index</font><font color="#990000">=</font><font color="#993399">0</font><font color="#990000">;</font> <font color="#009900">$index</font><font color="#990000">&lt;</font><b><font color="#000000">count</font></b><font color="#990000">(</font><font color="#009900">$dates</font><font color="#990000">);</font> <font color="#009900">$index</font><font color="#990000">++)</font> <font color="#CC3333">{</font>
   <font color="#009900">$rule</font> <font color="#990000">=</font> <font color="#009900">$dates</font><font color="#990000">[</font><font color="#009900">$index</font><font color="#990000">];</font>
   <font color="#009900">$sql</font> <font color="#990000">=</font> <font color="#CC3333">"SELECT cve_id,score,published,vector,severity,complexity,left(summary,50)</font>
<font color="#CC3333">    FROM vulnerabilities.nvdcve</font>
<font color="#CC3333">      WHERE date_format(published,'%Y-%m')='$rule'</font>
<font color="#CC3333">       ORDER BY (score+0)"</font><font color="#990000">;</font>
   <font color="#009900">$result</font> <font color="#990000">=</font> <b><font color="#000000">mysql_query</font></b><font color="#990000">(</font><font color="#009900">$sql</font><font color="#990000">,</font><font color="#009900">$conn</font><font color="#990000">);</font>
   <b><font color="#3366FF">if</font></b> <font color="#990000">(!</font><font color="#009900">$result</font><font color="#990000">)</font>
       <b><font color="#000000">logit</font></b><font color="#990000">(</font><font color="#CC3333">"Problem with $sql\n"</font><font color="#990000">,</font><font color="#993399">1</font><font color="#990000">);</font>
   <b><font color="#3366FF">print</font></b><font color="#990000">(</font><font color="#CC3333">"&lt;table border=1&gt;&lt;tr&gt;&lt;td&gt;&lt;table border=0&gt;&lt;tr&gt;&lt;th bgcolor=\"#727D96\"&gt;</font>
<font color="#CC3333">&lt;font color=\"#ffffff\" face=\"arial,helvetica,sanserif\"&gt;Bulletin&lt;/font&gt;&lt;/th&gt;&lt;th bgcolor=\"#727D96\"&gt;</font>
<font color="#CC3333">&lt;font color=\"#ffffff\" face=\"arial,helvetica,sanserif\"&gt;Impact&lt;/font&gt;&lt;/th&gt;&lt;th bgcolor=\"#727D96\"&gt;</font>
<font color="#CC3333">&lt;font color=\"#ffffff\" face=\"arial,helvetica,sanserif\"&gt;Date&lt;/font&gt;&lt;/th&gt;&lt;th bgcolor=\"#727D96\"&gt;</font>
<font color="#CC3333">&lt;font color=\"#ffffff\" face=\"arial,helvetica,sanserif\"&gt;Vector&lt;/font&gt;&lt;/th&gt;&lt;th bgcolor=\"#727D96\"&gt;</font>
<font color="#CC3333">&lt;font color=\"#ffffff\" face=\"arial,helvetica,sanserif\"&gt;Severity&lt;/font&gt;&lt;/th&gt;&lt;th bgcolor=\"#727D96\"&gt;</font>
<font color="#CC3333">&lt;font color=\"#ffffff\" face=\"arial,helvetica,sanserif\"&gt;Complexity&lt;/font&gt;&lt;/th&gt;&lt;th bgcolor=\"#727D96\"&gt;</font>
<font color="#CC3333">&lt;font color=\"#ffffff\" face=\"arial,helvetica,sanserif\"&gt;Short Summary&lt;/font&gt;&lt;/th&gt;&lt;/tr&gt;\n"</font><font color="#990000">);</font>
   <b><font color="#3366FF">for</font></b> <font color="#990000">(</font><font color="#009900">$count</font> <font color="#990000">=</font> <font color="#993399">1</font><font color="#990000">;</font> <b><font color="#3366FF">list</font></b><font color="#990000">(</font><font color="#009900">$cve_id</font><font color="#990000">,</font> <font color="#009900">$score</font><font color="#990000">,</font> <font color="#009900">$date</font><font color="#990000">,</font> <font color="#009900">$vector</font><font color="#990000">,</font> <font color="#009900">$severity</font><font color="#990000">,</font><font color="#009900">$complexity</font><font color="#990000">,</font><font color="#009900">$shortsum</font><font color="#990000">)</font> <font color="#990000">=</font>
     <b><font color="#000000">mysql_fetch_array</font></b> <font color="#990000">(</font><font color="#009900">$result</font><font color="#990000">,</font> MYSQL_NUM<font color="#990000">);</font> <font color="#990000">++</font><font color="#009900">$count</font><font color="#990000">)</font> <font color="#CC3333">{</font>
<font color="#990000">?&gt;</font>
      <font color="#990000">&lt;</font>tr<font color="#990000">&gt;&lt;</font>td CLASS<font color="#990000">=</font><font color="#CC3333">"plfieldhdrleft"</font> WIDTH<font color="#990000">=</font><font color="#CC3333">"20%"</font> BGCOLOR<font color="#990000">=</font><font color="#CC3333">'#F0F5FF'</font><font color="#990000">&gt;</font>
      <font color="#990000">&lt;?</font>  <b><font color="#3366FF">print</font></b><font color="#990000">(</font><font color="#CC3333">"&lt;a href=\"$nvd_host$cve_id\"&gt;$cve_id&lt;/a&gt;"</font><font color="#990000">);</font> <font color="#990000">?&gt;</font>
      <font color="#990000">&lt;/</font>td<font color="#990000">&gt;</font>
      <font color="#990000">&lt;</font>td CLASS<font color="#990000">=</font><font color="#CC3333">"plfieldhdrleft"</font> BGCOLOR<font color="#990000">=</font><font color="#CC3333">'#F9FCFF'</font><font color="#990000">&gt;</font>
      <font color="#990000">&lt;?</font>  <b><font color="#3366FF">print</font></b><font color="#990000">(</font><font color="#009900">$score</font><font color="#990000">);</font> <font color="#990000">?&gt;</font>
      <font color="#990000">&lt;/</font>td<font color="#990000">&gt;</font>
      <font color="#990000">&lt;</font>td CLASS<font color="#990000">=</font><font color="#CC3333">"plfieldhdrleft"</font> BGCOLOR<font color="#990000">=</font><font color="#CC3333">'#F0F5FF'</font><font color="#990000">&gt;</font>
      <font color="#990000">&lt;?</font>  <b><font color="#3366FF">print</font></b><font color="#990000">(</font><font color="#009900">$date</font><font color="#990000">);</font> <font color="#990000">?&gt;</font>
      <font color="#990000">&lt;/</font>td<font color="#990000">&gt;</font>
      <font color="#990000">&lt;</font>td CLASS<font color="#990000">=</font><font color="#CC3333">"plfieldhdrleft"</font> BGCOLOR<font color="#990000">=</font><font color="#CC3333">'#F9FCFF'</font><font color="#990000">&gt;</font>
      <font color="#990000">&lt;?</font>  <b><font color="#3366FF">print</font></b><font color="#990000">(</font><font color="#009900">$vector</font><font color="#990000">);</font> <font color="#990000">?&gt;</font>
      <font color="#990000">&lt;/</font>td<font color="#990000">&gt;</font>
      <font color="#990000">&lt;</font>td CLASS<font color="#990000">=</font><font color="#CC3333">"plfieldhdrleft"</font> BGCOLOR<font color="#990000">=</font><font color="#CC3333">'#F0F5FF'</font><font color="#990000">&gt;</font>
      <font color="#990000">&lt;?</font>  <b><font color="#3366FF">print</font></b><font color="#990000">(</font><font color="#009900">$severity</font><font color="#990000">);</font> <font color="#990000">?&gt;</font>
      <font color="#990000">&lt;/</font>td<font color="#990000">&gt;</font>
      <font color="#990000">&lt;</font>td CLASS<font color="#990000">=</font><font color="#CC3333">"plfieldhdrleft"</font> BGCOLOR<font color="#990000">=</font><font color="#CC3333">'#F9FCFF'</font><font color="#990000">&gt;</font>
      <font color="#990000">&lt;?</font>  <b><font color="#3366FF">print</font></b><font color="#990000">(</font><font color="#009900">$complexity</font><font color="#990000">);</font> <font color="#990000">?&gt;</font>
      <font color="#990000">&lt;/</font>td<font color="#990000">&gt;</font>
      <font color="#990000">&lt;</font>td CLASS<font color="#990000">=</font><font color="#CC3333">"plfieldhdrleft"</font> BGCOLOR<font color="#990000">=</font><font color="#CC3333">'#F0F5FF'</font><font color="#990000">&gt;</font>
      <font color="#990000">&lt;?</font>  <b><font color="#3366FF">print</font></b><font color="#990000">(</font><font color="#009900">$shortsum</font><font color="#990000">);</font> <font color="#990000">?&gt;</font>
      <font color="#990000">&lt;/</font>td<font color="#990000">&gt;</font>
      <font color="#990000">&lt;/</font>tr<font color="#990000">&gt;</font>
<font color="#990000">&lt;?</font>
   <font color="#CC3333">}</font>
<font color="#CC3333">}</font>
<b><font color="#3366FF">print</font></b><font color="#990000">(</font><font color="#CC3333">"&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;"</font><font color="#990000">);</font>
<b><font color="#000000">do_html_footer</font></b><font color="#990000">();</font>
</tt></pre>
</p>
<p>
The PHP program would generate a HTML table displaying the NVD CVE alerts for that month.  The table would look like:
</p>
<p>
<img src="http://blog.securitymonks.com/wp-content/uploads/2010/04/googletable3.png" width=500 />
</p>
<p>
When the CVE link is clicked on, the user is taken to the NIST NVD site where additional information is available.
</p>
<p>
<img src="http://blog.securitymonks.com/wp-content/uploads/2010/04/nvdsite.png" width=500 />
</p>
<p><h4><b>Using Perl to Create the JavaScript</b></h4>
</p>
<p>
The Perl code is rather simple now that we have the MySQL tables defined and the JavaScript we want to generate.  Much of the code consists of the JavaScript listed above.
</p>
<p>
<!-- Generator: GNU source-highlight 3.1.3<br />
by Lorenzo Bettini</p>
<p>http://www.lorenzobettini.it</p>
<p>http://www.gnu.org/software/src-highlite --></p>
<pre><tt><i><font color="#996633">#!/usr/local/bin/perl -w</font></i>
<b><font color="#3366FF">use</font></b> DBI<font color="#990000">;</font>
<b><font color="#3366FF">use</font></b> Time<font color="#990000">::</font>Local<font color="#990000">;</font>
<b><font color="#3366FF">use</font></b> POSIX <b><font color="#3366FF">qw</font></b><font color="#990000">(</font>strftime<font color="#990000">);</font>
<b><font color="#3366FF">use</font></b> LWP<font color="#990000">::</font>UserAgent<font color="#990000">;</font>
BEGIN<font color="#CC3333">{</font><b><font color="#3366FF">push</font></b> <font color="#009900">@INC</font><font color="#990000">,</font> <font color="#CC3333">"/home/jgerber/projects/nvd/perl"</font><font color="#CC3333">}</font>
<b><font color="#3366FF">use</font></b> ornl_feds <b><font color="#3366FF">qw</font></b><font color="#990000">(</font><font color="#009900">$db_host</font> <font color="#009900">$db</font> <font color="#009900">$mysql_user</font> <font color="#009900">$mysql_passwd</font> <font color="#990000">);</font>
<b><font color="#3366FF">sub</font></b> slide_nvd_alerts <font color="#CC3333">{</font>
  <b><font color="#3366FF">my</font></b><font color="#990000">(</font><font color="#009900">$min_date</font><font color="#990000">,</font><font color="#009900">$graph_name</font><font color="#990000">,</font><font color="#009900">$web_link</font><font color="#990000">,</font><font color="#009900">$dbh</font><font color="#990000">)</font> <font color="#990000">=</font> <font color="#009900">@_</font><font color="#990000">;</font>
  <b><font color="#3366FF">my</font></b> <font color="#009900">$slide</font> <font color="#990000">=</font> <font color="#CC3333">""</font><font color="#990000">;</font>
  <b><font color="#3366FF">my</font></b> <font color="#009900">$slide_head</font> <font color="#990000">=</font> <b><font color="#3366FF">qq</font></b><font color="#990000">!</font>
    <font color="#CC3333">&lt;script type='text/javascript'&gt;</font>
      google<font color="#990000">.</font><b><font color="#000000">load</font></b><font color="#990000">(</font><font color="#CC3333">'visualization'</font><font color="#990000">,</font> <font color="#CC3333">'1'</font><font color="#990000">,</font> <font color="#CC3333">{</font>packages<font color="#990000">:[</font><font color="#CC3333">'columnchart,table'</font><font color="#990000">]</font><font color="#CC3333">}</font><font color="#990000">);</font>
      google<font color="#990000">.</font><b><font color="#000000">setOnLoadCallback</font></b><font color="#990000">(</font>drawChart<font color="#990000">);</font>
      function <b><font color="#000000">drawChart</font></b><font color="#990000">()</font> <font color="#CC3333">{</font>
        var data <font color="#990000">=</font> new google<font color="#990000">.</font>visualization<font color="#990000">.</font><b><font color="#000000">DataTable</font></b><font color="#990000">();</font>
        data<font color="#990000">.</font><b><font color="#000000">addColumn</font></b><font color="#990000">(</font><font color="#CC3333">'date'</font><font color="#990000">,</font> <font color="#CC3333">'Date'</font><font color="#990000">);</font>
        data<font color="#990000">.</font><b><font color="#000000">addColumn</font></b><font color="#990000">(</font><font color="#CC3333">'number'</font><font color="#990000">,</font> <font color="#CC3333">'High'</font><font color="#990000">);</font>
        data<font color="#990000">.</font><b><font color="#000000">addColumn</font></b><font color="#990000">(</font><font color="#CC3333">'number'</font><font color="#990000">,</font> <font color="#CC3333">'Medium'</font><font color="#990000">);</font>
        data<font color="#990000">.</font><b><font color="#000000">addColumn</font></b><font color="#990000">(</font><font color="#CC3333">'number'</font><font color="#990000">,</font> <font color="#CC3333">'Low'</font><font color="#990000">);</font>
        data<font color="#990000">.</font><b><font color="#000000">addRows</font></b><font color="#990000">([</font>
<font color="#990000">!;</font>
   <b><font color="#3366FF">my</font></b> <font color="#009900">$slide_head_table</font> <font color="#990000">=</font> <b><font color="#3366FF">qq</font></b><font color="#990000">!</font>
        var data2 <font color="#990000">=</font> new google<font color="#990000">.</font>visualization<font color="#990000">.</font><b><font color="#000000">DataTable</font></b><font color="#990000">();</font>
        data2<font color="#990000">.</font><b><font color="#000000">addColumn</font></b><font color="#990000">(</font><font color="#CC3333">'date'</font><font color="#990000">,</font> <font color="#CC3333">'Date'</font><font color="#990000">);</font>
        data2<font color="#990000">.</font><b><font color="#000000">addColumn</font></b><font color="#990000">(</font><font color="#CC3333">'number'</font><font color="#990000">,</font> <font color="#CC3333">'High'</font><font color="#990000">);</font>
        data2<font color="#990000">.</font><b><font color="#000000">addColumn</font></b><font color="#990000">(</font><font color="#CC3333">'number'</font><font color="#990000">,</font> <font color="#CC3333">'Medium'</font><font color="#990000">);</font>
        data2<font color="#990000">.</font><b><font color="#000000">addColumn</font></b><font color="#990000">(</font><font color="#CC3333">'number'</font><font color="#990000">,</font> <font color="#CC3333">'Low'</font><font color="#990000">);</font>
        data2<font color="#990000">.</font><b><font color="#000000">addRows</font></b><font color="#990000">([</font>
<font color="#990000">!;</font>
   <b><font color="#3366FF">my</font></b> <font color="#009900">$table_div</font> <font color="#990000">=</font> <font color="#009900">$graph_name</font> <font color="#990000">.</font> <font color="#CC3333">"_tab"</font><font color="#990000">;</font>
   <b><font color="#3366FF">my</font></b> <font color="#009900">$slide_tail</font> <font color="#990000">=</font> <b><font color="#3366FF">qq</font></b><font color="#990000">!</font>
        var chart <font color="#990000">=</font> new google<font color="#990000">.</font>visualization<font color="#990000">.</font><b><font color="#000000">ColumnChart</font></b><font color="#990000">(</font>document<font color="#990000">.</font><b><font color="#000000">getElementById</font></b><font color="#990000">(</font><font color="#CC3333">'$graph_name'</font><font color="#990000">));</font>
        chart<font color="#990000">.</font><b><font color="#000000">draw</font></b><font color="#990000">(</font>data<font color="#990000">,</font> <font color="#CC3333">{</font>displayAnnotations<font color="#990000">:</font>true<font color="#990000">,</font> is3D<font color="#990000">:</font> true<font color="#990000">,</font> isStacked<font color="#990000">:</font> true<font color="#990000">,</font> min<font color="#990000">:</font> <font color="#993399">0</font><font color="#990000">,</font> allowHtml<font color="#990000">:</font> true<font color="#990000">,</font>
 colors<font color="#990000">:[</font><font color="#CC3333">{</font>color<font color="#990000">:</font><font color="#CC3333">'#E41B17'</font><font color="#990000">,</font> darker<font color="#990000">:</font><font color="#CC3333">'#C11B17'</font><font color="#CC3333">}</font><font color="#990000">,</font> <font color="#CC3333">{</font>color<font color="#990000">:</font><font color="#CC3333">'#FFA500'</font><font color="#990000">,</font> darker<font color="#990000">:</font><font color="#CC3333">'#E56717'</font><font color="#CC3333">}</font><font color="#990000">,</font>
<font color="#CC3333">{</font>color<font color="#990000">:</font><font color="#CC3333">'#FFE87C'</font><font color="#990000">,</font> darker<font color="#990000">:</font><font color="#CC3333">'#C8B560'</font><font color="#CC3333">}</font><font color="#990000">]</font><font color="#CC3333">}</font><font color="#990000">);</font>
        var table <font color="#990000">=</font> new google<font color="#990000">.</font>visualization<font color="#990000">.</font><b><font color="#000000">Table</font></b><font color="#990000">(</font>document<font color="#990000">.</font><b><font color="#000000">getElementById</font></b><font color="#990000">(</font><font color="#CC3333">'$table_div'</font><font color="#990000">));</font>
        table<font color="#990000">.</font><b><font color="#000000">draw</font></b><font color="#990000">(</font>data2<font color="#990000">,</font> <font color="#CC3333">{</font>showRowNumber<font color="#990000">:</font> true<font color="#990000">,</font> sortAscending<font color="#990000">:</font> false<font color="#990000">,</font> sortColumn<font color="#990000">:</font> <font color="#993399">0</font><font color="#990000">,</font> allowHtml<font color="#990000">:</font> true<font color="#CC3333">}</font><font color="#990000">);</font>
            <font color="#CC3333">//</font> Set a <font color="#CC3333">'select'</font> event listener <b><font color="#3366FF">for</font></b> the table<font color="#990000">.</font>
        <font color="#CC3333">//</font> When the table is selected<font color="#990000">,</font>
        <font color="#CC3333">//</font> we set the selection on the line graph<font color="#990000">.</font>
        google<font color="#990000">.</font>visualization<font color="#990000">.</font>events<font color="#990000">.</font><b><font color="#000000">addListener</font></b><font color="#990000">(</font>table<font color="#990000">,</font> <font color="#CC3333">'select'</font><font color="#990000">,</font> <b><font color="#000000">function</font></b><font color="#990000">()</font> <font color="#CC3333">{</font>
          chart<font color="#990000">.</font><b><font color="#000000">setSelection</font></b><font color="#990000">([</font><font color="#CC3333">{</font>row<font color="#990000">:</font> table<font color="#990000">.</font><b><font color="#000000">getSelection</font></b><font color="#990000">()[</font><font color="#993399">0</font><font color="#990000">].</font>row<font color="#990000">,</font> column<font color="#990000">:</font> <font color="#993399">1</font><font color="#CC3333">}</font><font color="#990000">]);</font>
         <font color="#CC3333">}</font><font color="#990000">);</font>
      <font color="#CC3333">//</font> Set a <font color="#CC3333">'select'</font> event listener <b><font color="#3366FF">for</font></b> the graph<font color="#990000">.</font>
        <font color="#CC3333">//</font> When the graph is selected<font color="#990000">,</font>
        <font color="#CC3333">//</font> we set the selection on the table<font color="#990000">.</font>
        google<font color="#990000">.</font>visualization<font color="#990000">.</font>events<font color="#990000">.</font><b><font color="#000000">addListener</font></b><font color="#990000">(</font>chart<font color="#990000">,</font> <font color="#CC3333">'select'</font><font color="#990000">,</font> <b><font color="#000000">function</font></b><font color="#990000">()</font> <font color="#CC3333">{</font>
           table<font color="#990000">.</font><b><font color="#000000">setSelection</font></b><font color="#990000">([</font><font color="#CC3333">{</font>row<font color="#990000">:</font> chart<font color="#990000">.</font><b><font color="#000000">getSelection</font></b><font color="#990000">()[</font><font color="#993399">0</font><font color="#990000">].</font>row<font color="#CC3333">}</font><font color="#990000">]);</font>
        <font color="#CC3333">}</font><font color="#990000">);</font>
      <font color="#CC3333">}</font>
    <font color="#CC3333">&lt;/script&gt;</font>
<font color="#990000">!;</font>
   <b><font color="#3366FF">if</font></b> <font color="#990000">(</font><font color="#009900">$min_date</font> <b><font color="#3366FF">eq</font></b> <font color="#CC3333">""</font><font color="#990000">)</font> <font color="#CC3333">{</font>
      <b><font color="#3366FF">my</font></b> <font color="#009900">$sql2</font> <font color="#990000">=</font> <b><font color="#3366FF">qq</font></b><font color="#CC3333">{ SELECT min(published) FROM vulnerabilities.nvdcve }</font><font color="#990000">;</font>
      <b><font color="#3366FF">my</font></b> <font color="#009900">$sth2</font> <font color="#990000">=</font> <font color="#009900">$dbh</font><font color="#990000">-&gt;</font><b><font color="#000000">prepare</font></b><font color="#990000">(</font> <font color="#009900">$sql2</font> <font color="#990000">);</font>
      <b><font color="#3366FF">my</font></b> <font color="#009900">$rc2</font> <font color="#990000">=</font> <font color="#009900">$sth2</font><font color="#990000">-&gt;</font><b><font color="#000000">execute</font></b><font color="#990000">();</font>
      <b><font color="#3366FF">if</font></b> <font color="#990000">(</font><font color="#009900">$rc2</font><font color="#990000">)</font> <font color="#CC3333">{</font>
         <font color="#009900">$min_date</font> <font color="#990000">=</font> <font color="#009900">$sth2</font><font color="#990000">-&gt;</font><b><font color="#000000">fetchrow_array</font></b><font color="#990000">();</font>
      <font color="#CC3333">}</font>
   <font color="#CC3333">}</font>
   <b><font color="#3366FF">my</font></b> <font color="#009900">$table_data</font> <font color="#990000">=</font> <font color="#CC3333">""</font><font color="#990000">;</font>
   <b><font color="#3366FF">my</font></b> <font color="#009900">$graph_data</font> <font color="#990000">=</font> <font color="#CC3333">""</font><font color="#990000">;</font>
   <b><font color="#3366FF">my</font></b> <font color="#009900">$sql2</font> <font color="#990000">=</font> <b><font color="#3366FF">qq</font></b><font color="#CC3333">{</font> <b><font color="#3366FF">select</font></b> <b><font color="#000000">date_format</font></b><font color="#990000">(</font>published<font color="#990000">,</font><font color="#CC3333">'%Y-%m'</font><font color="#990000">),</font>severity<font color="#990000">,</font><b><font color="#000000">count</font></b><font color="#990000">(</font>severity<font color="#990000">)</font>
      FROM vulnerabilities<font color="#990000">.</font>nvdcve where published <font color="#990000">&gt;=</font> <font color="#990000">?</font> group by <b><font color="#000000">date_format</font></b><font color="#990000">(</font>published<font color="#990000">,</font><font color="#CC3333">'%Y-%m'</font><font color="#990000">),</font>severity <font color="#CC3333">}</font><font color="#990000">;</font>
   <b><font color="#3366FF">my</font></b> <font color="#009900">$sth2</font> <font color="#990000">=</font> <font color="#009900">$dbh</font><font color="#990000">-&gt;</font><b><font color="#000000">prepare</font></b><font color="#990000">(</font> <font color="#009900">$sql2</font> <font color="#990000">);</font>
   <b><font color="#3366FF">my</font></b> <font color="#009900">$rc2</font> <font color="#990000">=</font> <font color="#009900">$sth2</font><font color="#990000">-&gt;</font><b><font color="#000000">execute</font></b><font color="#990000">(</font><font color="#009900">$min_date</font><font color="#990000">);</font>
   <b><font color="#3366FF">if</font></b> <font color="#990000">(</font><font color="#009900">$rc2</font><font color="#990000">)</font> <font color="#CC3333">{</font>
      <b><font color="#3366FF">my</font></b> <font color="#990000">(</font><font color="#009900">$change</font><font color="#990000">,</font><font color="#009900">$virgin</font><font color="#990000">,</font><font color="#009900">$ht</font><font color="#990000">,</font><font color="#009900">$mt</font><font color="#990000">,</font><font color="#009900">$lt</font><font color="#990000">,</font><font color="#009900">$mmax_date</font><font color="#990000">)</font> <font color="#990000">=</font> <font color="#990000">(</font><font color="#CC3333">""</font><font color="#990000">,</font><font color="#993399">1</font><font color="#990000">,</font><font color="#993399">0</font><font color="#990000">,</font><font color="#993399">0</font><font color="#990000">,</font><font color="#993399">0</font><font color="#990000">,</font><font color="#CC3333">""</font><font color="#990000">);</font>
      <b><font color="#3366FF">while</font></b> <font color="#990000">(</font><b><font color="#3366FF">my</font></b><font color="#990000">(</font><font color="#009900">$snapshot_date</font><font color="#990000">,</font> <font color="#009900">$severity</font><font color="#990000">,</font> <font color="#009900">$pcount</font><font color="#990000">)</font> <font color="#990000">=</font> <font color="#009900">$sth2</font><font color="#990000">-&gt;</font><b><font color="#000000">fetchrow_array</font></b><font color="#990000">())</font> <font color="#CC3333">{</font>
         <b><font color="#3366FF">my</font></b> <font color="#009900">$sql3</font> <font color="#990000">=</font> <b><font color="#3366FF">qq</font></b><font color="#CC3333">{</font> SELECT <b><font color="#000000">max</font></b><font color="#990000">(</font>published<font color="#990000">)</font> FROM vulnerabilities<font color="#990000">.</font>nvdcve where
<b><font color="#000000">date_format</font></b><font color="#990000">(</font>published<font color="#990000">,</font><font color="#CC3333">'%Y-%m'</font><font color="#990000">)=?</font> <font color="#CC3333">}</font><font color="#990000">;</font>
         <b><font color="#3366FF">my</font></b> <font color="#009900">$sth3</font> <font color="#990000">=</font> <font color="#009900">$dbh</font><font color="#990000">-&gt;</font><b><font color="#000000">prepare</font></b><font color="#990000">(</font> <font color="#009900">$sql3</font> <font color="#990000">);</font>
         <b><font color="#3366FF">my</font></b> <font color="#009900">$rc3</font> <font color="#990000">=</font> <font color="#009900">$sth3</font><font color="#990000">-&gt;</font><b><font color="#000000">execute</font></b><font color="#990000">(</font><font color="#009900">$snapshot_date</font><font color="#990000">);</font>
         <font color="#009900">$max_date</font> <font color="#990000">=</font>  <font color="#009900">$sth3</font><font color="#990000">-&gt;</font><b><font color="#000000">fetchrow_array</font></b><font color="#990000">();</font>
         <font color="#009900">$max_date</font> <font color="#990000">=~</font> <b><font color="#3366FF">s</font></b><font color="#FF6600">/ \S+$//</font><font color="#990000">;</font>
         <b><font color="#3366FF">if</font></b> <font color="#990000">(</font><font color="#009900">$change</font> ne <font color="#009900">$snapshot_date</font><font color="#990000">)</font> <font color="#CC3333">{</font>
            <b><font color="#3366FF">if</font></b> <font color="#990000">(!</font> <font color="#009900">$virgin</font><font color="#990000">)</font> <font color="#CC3333">{</font>
                <b><font color="#3366FF">my</font></b><font color="#990000">(</font><font color="#009900">$year</font><font color="#990000">,</font><font color="#009900">$month</font><font color="#990000">,</font><font color="#009900">$day</font><font color="#990000">)</font> <font color="#990000">=</font> <b><font color="#3366FF">split</font></b><font color="#990000">(</font><font color="#CC3333">"-"</font><font color="#990000">,</font><font color="#009900">$mmax_date</font><font color="#990000">);</font>
                <b><font color="#3366FF">my</font></b> <font color="#009900">$mmonth</font> <font color="#990000">=</font> <font color="#009900">$month</font><font color="#990000">;</font>
                <font color="#009900">$month</font><font color="#990000">--;</font>
                <font color="#009900">$graph_data</font> <font color="#990000">.=</font> <b><font color="#3366FF">qq</font></b><font color="#990000">!</font>           <font color="#990000">[</font>new <b><font color="#000000">Date</font></b><font color="#990000">(</font><font color="#009900">$year</font><font color="#990000">,</font> <font color="#009900">$month</font><font color="#990000">,</font> <font color="#009900">$day</font><font color="#990000">),</font><font color="#009900">$ht</font><font color="#990000">,</font><font color="#009900">$mt</font><font color="#990000">,</font><font color="#009900">$lt</font><font color="#990000">],</font>
<font color="#990000">!;</font>
                <font color="#009900">$table_data</font> <font color="#990000">.=</font> <b><font color="#3366FF">qq</font></b><font color="#990000">!</font>           <font color="#990000">[</font><font color="#CC3333">{</font>v<font color="#990000">:</font>new <b><font color="#000000">Date</font></b><font color="#990000">(</font><font color="#009900">$year</font><font color="#990000">,</font> <font color="#009900">$month</font><font color="#990000">,</font> <font color="#009900">$day</font><font color="#990000">),</font>
              f<font color="#990000">:</font><font color="#CC3333">'&lt;a href="$web_link/cvealerts.php?date=$year-$mmonth"&gt;$mmax_date&lt;/a&gt;'</font><font color="#CC3333">}</font><font color="#990000">,</font> <font color="#009900">$ht</font><font color="#990000">,</font><font color="#009900">$mt</font><font color="#990000">,</font><font color="#009900">$lt</font><font color="#990000">],</font>
<font color="#990000">!;</font>
                <font color="#990000">(</font><font color="#009900">$ht</font><font color="#990000">,</font><font color="#009900">$mt</font><font color="#990000">,</font><font color="#009900">$lt</font><font color="#990000">)</font> <font color="#990000">=</font> <font color="#990000">(</font><font color="#993399">0</font><font color="#990000">,</font><font color="#993399">0</font><font color="#990000">,</font><font color="#993399">0</font><font color="#990000">);</font>
             <font color="#CC3333">}</font>
             <font color="#009900">$change</font> <font color="#990000">=</font> <font color="#009900">$snapshot_date</font><font color="#990000">;</font>
          <font color="#CC3333">}</font>
          <b><font color="#3366FF">if</font></b> <font color="#990000">(</font><font color="#009900">$severity</font> <b><font color="#3366FF">eq</font></b> <font color="#CC3333">"HIGH"</font><font color="#990000">)</font> <font color="#CC3333">{</font> <font color="#009900">$ht</font> <font color="#990000">=</font> <font color="#009900">$pcount</font><font color="#990000">;</font> <font color="#CC3333">}</font>
          <b><font color="#3366FF">elsif</font></b> <font color="#990000">(</font><font color="#009900">$severity</font> <b><font color="#3366FF">eq</font></b> <font color="#CC3333">"MEDIUM"</font><font color="#990000">)</font> <font color="#CC3333">{</font> <font color="#009900">$mt</font> <font color="#990000">=</font> <font color="#009900">$pcount</font><font color="#990000">;</font> <font color="#CC3333">}</font>
          <b><font color="#3366FF">elsif</font></b> <font color="#990000">(</font><font color="#009900">$severity</font> <b><font color="#3366FF">eq</font></b> <font color="#CC3333">"LOW"</font><font color="#990000">)</font> <font color="#CC3333">{</font> <font color="#009900">$lt</font> <font color="#990000">=</font> <font color="#009900">$pcount</font><font color="#990000">;</font> <font color="#CC3333">}</font>
          <b><font color="#3366FF">if</font></b> <font color="#990000">(</font><font color="#009900">$mmax_date</font> <b><font color="#3366FF">eq</font></b> <font color="#CC3333">""</font><font color="#990000">)</font> <font color="#CC3333">{</font> <font color="#009900">$mmax_date</font> <font color="#990000">=</font> <font color="#009900">$max_date</font><font color="#990000">;</font> <font color="#CC3333">}</font>
          <b><font color="#3366FF">if</font></b> <font color="#990000">(</font><font color="#009900">$mmax_date</font> lt <font color="#009900">$max_date</font><font color="#990000">)</font> <font color="#CC3333">{</font> <font color="#009900">$mmax_date</font> <font color="#990000">=</font> <font color="#009900">$max_date</font><font color="#990000">;</font> <font color="#CC3333">}</font>
          <font color="#009900">$virgin</font> <font color="#990000">=</font> <font color="#993399">0</font><font color="#990000">;</font>
      <font color="#CC3333">}</font>
      <b><font color="#3366FF">my</font></b><font color="#990000">(</font><font color="#009900">$year</font><font color="#990000">,</font><font color="#009900">$month</font><font color="#990000">,</font><font color="#009900">$day</font><font color="#990000">)</font> <font color="#990000">=</font> <b><font color="#3366FF">split</font></b><font color="#990000">(</font><font color="#CC3333">"-"</font><font color="#990000">,</font><font color="#009900">$mmax_date</font><font color="#990000">);</font>
      <b><font color="#3366FF">my</font></b> <font color="#009900">$mmonth</font> <font color="#990000">=</font> <font color="#009900">$month</font><font color="#990000">;</font>
      <font color="#009900">$month</font><font color="#990000">--;</font>
      <font color="#009900">$graph_data</font> <font color="#990000">.=</font> <b><font color="#3366FF">qq</font></b><font color="#990000">!</font>           <font color="#990000">[</font>new <b><font color="#000000">Date</font></b><font color="#990000">(</font><font color="#009900">$year</font><font color="#990000">,</font> <font color="#009900">$month</font><font color="#990000">,</font> <font color="#009900">$day</font><font color="#990000">),</font><font color="#009900">$ht</font><font color="#990000">,</font><font color="#009900">$mt</font><font color="#990000">,</font><font color="#009900">$lt</font><font color="#990000">]</font>
<font color="#990000">!;</font>
     <font color="#009900">$table_data</font> <font color="#990000">.=</font> <b><font color="#3366FF">qq</font></b><font color="#990000">!</font>           <font color="#990000">[</font><font color="#CC3333">{</font>v<font color="#990000">:</font>new <b><font color="#000000">Date</font></b><font color="#990000">(</font><font color="#009900">$year</font><font color="#990000">,</font> <font color="#009900">$month</font><font color="#990000">,</font> <font color="#009900">$day</font><font color="#990000">),</font>
              f<font color="#990000">:</font><font color="#CC3333">'&lt;a href="$web_link/cvealerts.php?date=$year-$mmonth"&gt;$mmax_date&lt;/a&gt;'</font><font color="#CC3333">}</font><font color="#990000">,</font> <font color="#009900">$ht</font><font color="#990000">,</font><font color="#009900">$mt</font><font color="#990000">,</font><font color="#009900">$lt</font><font color="#990000">],</font>
<font color="#990000">!;</font>
   <font color="#CC3333">}</font>
   <font color="#009900">$table_data</font> <font color="#990000">.=</font> <font color="#CC3333">"        ]);\n"</font><font color="#990000">;</font>
   <font color="#009900">$graph_data</font> <font color="#990000">.=</font> <font color="#CC3333">"        ]);\n"</font><font color="#990000">;</font>
   <font color="#009900">$slide</font> <font color="#990000">=</font> <font color="#009900">$slide_head</font> <font color="#990000">.</font>  <font color="#009900">$graph_data</font> <font color="#990000">.</font> <font color="#009900">$slide_head_table</font> <font color="#990000">.</font> <font color="#009900">$table_data</font> <font color="#990000">.</font> <font color="#009900">$slide_tail</font><font color="#990000">;</font>
   <b><font color="#3366FF">return</font></b><font color="#990000">(</font><font color="#009900">$slide</font><font color="#990000">);</font>
<font color="#CC3333">}</font>
<b><font color="#3366FF">sub</font></b> slide_body <font color="#CC3333">{</font>
  <b><font color="#3366FF">my</font></b><font color="#990000">(</font><font color="#009900">$graph_name</font><font color="#990000">,</font><font color="#009900">$title</font><font color="#990000">,</font><font color="#009900">$style</font><font color="#990000">)</font> <font color="#990000">=</font> <font color="#009900">@_</font><font color="#990000">;</font>
  <b><font color="#3366FF">my</font></b> <font color="#009900">$table_name</font> <font color="#990000">=</font> <font color="#009900">$graph_name</font> <font color="#990000">.</font> <font color="#CC3333">"_tab"</font><font color="#990000">;</font>
  <b><font color="#3366FF">my</font></b> <font color="#009900">$table_text</font> <font color="#990000">=</font> <font color="#CC3333">"div id=\"$table_name\""</font><font color="#990000">;</font>
  <b><font color="#3366FF">if</font></b> <font color="#990000">(</font><font color="#009900">$style</font> ne <font color="#CC3333">""</font><font color="#990000">)</font> <font color="#CC3333">{</font>
     <font color="#009900">$table_text</font> <font color="#990000">.=</font> <font color="#CC3333">" style=\'$style\'"</font><font color="#990000">;</font>
  <font color="#CC3333">}</font>
  <b><font color="#3366FF">my</font></b> <font color="#009900">$slide2</font> <font color="#990000">=</font> <font color="#CC3333">"&lt;h3&gt;$title&lt;/h3&gt;\n"</font><font color="#990000">;</font>
  <b><font color="#3366FF">my</font></b> <font color="#009900">$itext</font> <font color="#990000">=</font> <font color="#CC3333">"div id=\"$graph_name\""</font><font color="#990000">;</font>
  <b><font color="#3366FF">if</font></b> <font color="#990000">(</font><font color="#009900">$style</font> ne <font color="#CC3333">""</font><font color="#990000">)</font> <font color="#CC3333">{</font>
     <font color="#009900">$itext</font> <font color="#990000">.=</font> <font color="#CC3333">" style=\'$style\'"</font><font color="#990000">;</font>
  <font color="#CC3333">}</font>
  <font color="#009900">$slide2</font> <font color="#990000">.=</font> <b><font color="#3366FF">qq</font></b><font color="#CC3333">{</font>
    <font color="#CC3333">&lt;table&gt;&lt;tr&gt;</font>
    <font color="#CC3333">&lt;td valign="top"&gt;&lt;$itext&gt;&lt;/div&gt;&lt;/td&gt;</font>
    <font color="#CC3333">&lt;td valign="top"&gt;&lt;$table_text&gt;&lt;/div&gt;&lt;/td&gt;</font>
    <font color="#CC3333">&lt;td valign="top"&gt;</font>   <font color="#CC3333">&lt;/td&gt;</font>
    <font color="#CC3333">&lt;td valign="top"&gt;&lt;div id="labels"&gt;&lt;/div&gt;&lt;/td&gt;</font>
    <font color="#CC3333">&lt;/tr&gt;&lt;/table&gt;</font>
  <font color="#CC3333">}</font><font color="#990000">;</font>
  <b><font color="#3366FF">return</font></b><font color="#990000">(</font><font color="#009900">$slide2</font><font color="#990000">);</font>
<font color="#CC3333">}</font>
<i><font color="#996633"># Main</font></i>
<b><font color="#3366FF">my</font></b> <font color="#009900">$web_link</font> <font color="#990000">=</font> <font color="#CC3333">"/nvd"</font><font color="#990000">;</font>
<b><font color="#3366FF">my</font></b> <font color="#009900">$results_dir</font> <font color="#990000">=</font> <font color="#CC3333">"/data/html"</font> <font color="#990000">.</font> <font color="#009900">$web_link</font><font color="#990000">;</font>
<b><font color="#3366FF">my</font></b> <font color="#009900">$result_file</font> <font color="#990000">=</font> <font color="#009900">$results_dir</font> <font color="#990000">.</font> <font color="#CC3333">"/nvdcve_stats.html"</font><font color="#990000">;</font>
<b><font color="#3366FF">my</font></b> <font color="#009900">$debug</font> <font color="#990000">=</font> <font color="#993399">1</font><font color="#990000">;</font>
<b><font color="#3366FF">my</font></b> <font color="#009900">$db</font> <font color="#990000">=</font> <font color="#CC3333">"vulnerabilities"</font><font color="#990000">;</font>
<b><font color="#3366FF">local</font></b><font color="#990000">(</font><font color="#009900">$dbh</font><font color="#990000">)</font> <font color="#990000">=</font> DBI<font color="#990000">-&gt;</font><b><font color="#000000">connect</font></b><font color="#990000">(</font><font color="#CC3333">"DBI:mysql:$db:$db_host"</font><font color="#990000">,</font> <font color="#009900">$mysql_user</font><font color="#990000">,</font> <font color="#009900">$mysql_passwd</font><font color="#990000">)</font> <font color="#990000">||</font>
   <b><font color="#3366FF">die</font></b> <font color="#CC3333">"ERROR: Connecting: $DBI::errstr\n"</font><font color="#990000">;</font>
<font color="#009900">$slides_data</font> <font color="#990000">.=</font> <font color="#990000">&amp;</font><b><font color="#000000">slide_body</font></b><font color="#990000">(</font><font color="#CC3333">"s4graph"</font><font color="#990000">,</font><font color="#CC3333">"NVD CVE Alerts"</font><font color="#990000">,</font><font color="#CC3333">"width:700px; height:400px;"</font><font color="#990000">);</font>
<font color="#009900">$slides_head</font> <font color="#990000">.=</font> <font color="#990000">&amp;</font><b><font color="#000000">slide_nvd_alerts</font></b><font color="#990000">(</font><font color="#CC3333">""</font><font color="#990000">,</font><font color="#CC3333">"s4graph"</font><font color="#990000">,</font><font color="#009900">$web_link</font><font color="#990000">,</font><font color="#009900">$dbh</font><font color="#990000">);</font>
<b><font color="#3366FF">open</font></b><font color="#990000">(</font>OUTFILE<font color="#990000">,</font><font color="#CC3333">"&gt;$result_file"</font><font color="#990000">);</font>
<b><font color="#3366FF">print</font></b> OUTFILE <font color="#CC3333">"&lt;HTML&gt;\n&lt;HEAD&gt;&lt;TITLE&gt;NVD CVE Statistics&lt;/TITLE&gt;\n"</font><font color="#990000">;</font>
<b><font color="#3366FF">print</font></b> OUTFILE <font color="#CC3333">"&lt;script type=\"text/javascript\" src=\"http://www.google.com/jsapi\"&gt;&lt;/script&gt;\n"</font><font color="#990000">;</font>
<b><font color="#3366FF">print</font></b> OUTFILE <font color="#009900">$slides_head</font><font color="#990000">;</font>
<b><font color="#3366FF">print</font></b> OUTFILE <font color="#CC3333">"&lt;/HEAD&gt;\n&lt;BODY&gt;\n"</font><font color="#990000">;</font>
<b><font color="#3366FF">print</font></b> OUTFILE <font color="#009900">$slides_data</font><font color="#990000">;</font>
<b><font color="#3366FF">print</font></b> OUTFILE <font color="#CC3333">"&lt;/BODY&gt;\n"</font><font color="#990000">;</font>
<b><font color="#3366FF">close</font></b><font color="#990000">(</font>OUTFILE<font color="#990000">);</font>
<b><font color="#3366FF">exit</font></b><font color="#990000">;</font>
</tt></pre>
</p>
<p><h3>Other Charting Options</h3>
</p>
<p>
Google, Google users, and other companies have <a href="http://code.google.com/apis/visualization/documentation/gallery.html">shared</a> some JavaScript visualizations built on the Google Visualization API to help you get started.  Below are some example:
</p>
<table class="gviz_gallery" id="gviz_gallery" cellpadding="2" cellspacing="0">
<tr class="gallery_filter_featured gallery_filter_charts gallery_filter_google">
<td><a href="http://code.google.com/apis/visualization/documentation/gallery/annotatedtimeline.html"><br />
    <img src="http://blog.securitymonks.com/wp-content/uploads/2010/04/icon-annotatedtimeline.png" height="60" width="120" /></a></td>
<td><a class="gallery_doc_title" href="http://blog.securitymonks.com/apis/visualization/documentation/gallery/annotatedtimeline.html">Annotated Time Line</a> (<a class="gallery_gwt_link" href="http://code.google.com/docreader/#p=gwt-google-apis&amp;s=gwt-google-apis&amp;t=Visualization">GWT Integrated</a>)</p>
<p class="gallery_description">An animated time series chart.</p>
<p class="gallery_author">By: Google</p>
</td>
</tr>
<tr class="gallery_filter_charts gallery_filter_google">
<td><a href="http://code.google.com/apis/visualization/documentation/gallery/areachart.html"><br />
    <img src="http://blog.securitymonks.com/wp-content/uploads/2010/04/icon-areachart.png" height="60" width="120" /></a></td>
<td><a href="http://code.google.com/apis/visualization/documentation/gallery/areachart.html"  class="gallery_doc_title">Area Chart </a> (<a class="gallery_gwt_link" href="http://code.google.com/docreader/#p=gwt-google-apis&amp;s=gwt-google-apis&amp;t=Visualization">GWT Integrated</a>)</p>
<p class="gallery_description">Interactive area chart.</p>
<p class="gallery_author">By: Google</p>
</td>
</tr>
<tr class="gallery_filter_charts gallery_filter_google">
<td><a href="http://code.google.com/apis/visualization/documentation/gallery/barchart.html"><br />
    <img src="http://blog.securitymonks.com/wp-content/uploads/2010/04/icon-barchart.png" height="60" width="120" /></a></td>
<td><a class="gallery_doc_title" href="http://blog.securitymonks.com/apis/visualization/documentation/gallery/barchart.html">Bar Chart</a> (<a class="gallery_gwt_link" href="http://code.google.com/docreader/#p=gwt-google-apis&amp;s=gwt-google-apis&amp;t=Visualization">GWT Integrated</a>)</p>
<p class="gallery_description">Interactive bar chart.</p>
<p class="gallery_author">By: Google</p>
</td>
</tr>
<tr class="gallery_filter_featured gallery_filter_charts gallery_filter_fun">
<td><a href="http://visapi-gadgets.googlecode.com/svn/trunk/barsofstuff/doc.html" onclick="return warn()"><br />
    <img src="http://visapi-gadgets.googlecode.com/svn/trunk/barsofstuff/icon.png" height="60" width="120" /></a></td>
<td><a href="http://visapi-gadgets.googlecode.com/svn/trunk/barsofstuff/doc.html" class="gallery_doc_title" onClick="return warn()">Bars of Stuff</a></p>
<p class="gallery_description">Fun bar charts using images of trains, chocolate, worms, and more.</p>
<p class="gallery_author">By: The visapi project</p>
</td>
</tr>
<tr class="gallery_filter_charts">
<td><a href="http://informatics.systemsbiology.net/visualizations/heatmap/bioheatmap.html" onclick="return warn()"><img src="http://blog.securitymonks.com/wp-content/uploads/2010/04/bioheatmap_screenshot.png" height="60" width="120" /></a></td>
<td><a href="http://informatics.systemsbiology.net/visualizations/heatmap/bioheatmap.html" class="gallery_doc_title" onClick="return warn()">Bio Heat Map</a></p>
<p class="gallery_description">Heatmaps are a useful way to visualize matricies of data. Scientists often use green-black-red heatmaps to visualize gene expression data from microarrays. This visualization supports both three color heatmaps (ex: green to black to red) and two color heatmaps (ex: white to yellow).</p>
<p class="gallery_author">By: <a href="http://www.systemsbiology.org/">Institute for Systems Biology</a></p>
</td>
</tr>
<tr class="gallery_filter_charts gallery_filter_google">
<td><a href="http://code.google.com/apis/visualization/documentation/gallery/columnchart.html"><br />
    <img src="http://blog.securitymonks.com/wp-content/uploads/2010/04/icon-columnchart.png" height="60" width="120" /></a></td>
<td><a class="gallery_doc_title" href="http://code.google.com/apis/visualization/documentation/gallery/columnchart.html">Column Chart</a> (<a class="gallery_gwt_link" href="http://code.google.com/docreader/#p=gwt-google-apis&amp;s=gwt-google-apis&amp;t=Visualization">GWT Integrated</a>)</p>
<p class="gallery_description">Interactive column chart.</p>
<p class="gallery_author">By: Google</p>
</td>
</tr>
<tr class="gallery_filter_featured gallery_filter_project">
<td><a href="http://www.drasticdata.nl/DrasticTreemapGApi/index.html"><br />
    <img src="http://blog.securitymonks.com/wp-content/uploads/2010/04/icon-drastictreemap.png" height="60" width="120" /></a></td>
<td><a class="gallery_doc_title" href="http://www.drasticdata.nl/DrasticTreemapGApi/index.html">Drastic Treemap</a></p>
<p class="gallery_description">A dynamic treemap in Flash.</p>
<p class="gallery_author">By: <a href="http://www.drasticdata.nl">DrasticData</a></p>
</td>
</tr>
<tr class="gallery_filter_featured gallery_filter_charts">
<td><a href="http://danvk.org/dygraphs/"><br />
    <img src="http://blog.securitymonks.com/wp-content/uploads/2010/04/icon-dygraphs.png" height="60" width="120" /></a></td>
<td><a class="gallery_doc_title" href="http://danvk.org/dygraphs/">Dygraphs</a></p>
<p class="gallery_description">The dygraphs JavaScript library produces interactive, zoomable charts of time series.</p>
<p class="gallery_author">By: Dan Vanderkam</p>
</td>
</tr>
<tr class="gallery_filter_tables">
<td><a href="http://informatics.systemsbiology.net/visualizations/heatmap/FilterDataTableControl.html" onclick="return warn()"><img src="http://systemsbiology-visualizations.googlecode.com/svn/trunk/src/main/images/icon_filterDataTableControl.png" height="60" width="120" /></a></td>
<td><a href="http://informatics.systemsbiology.net/visualizations/heatmap/FilterDataTableControl.html" class="gallery_doc_title" onClick="return warn()">Filters </a></p>
<p class="gallery_description">A Visualization that acts as a control over other visualizations. It is rendered within the browser using HTML. This visualization offers the ability to select some criteria to filter the DataTable used by the controlled visualizations.</p>
<p class="gallery_author">By: <a href="http://www.systemsbiology.org/">Institute for Systems Biology</a></p>
</td>
</tr>
<tr class="gallery_filter_featured gallery_filter_charts gallery_filter_google">
<td><a href="http://code.google.com/apis/visualization/documentation/gallery/gauge.html"><br />
    <img src="http://blog.securitymonks.com/wp-content/uploads/2010/04//icon-gauge.png" height="60" width="120" /></a></td>
<td><a class="gallery_doc_title" href="http://code.google.com/apis/visualization/documentation/gallery/gauge.html">Gauge</a> (<a class="gallery_gwt_link" href="http://code.google.com/docreader/#p=gwt-google-apis&amp;s=gwt-google-apis&amp;t=Visualization">GWT Integrated</a>)</p>
<p class="gallery_description">Each numeric value is displayed as a gauge.</p>
<p class="gallery_author">By: Google</p>
</td>
</tr>
<tr class="gallery_filter_maps gallery_filter_featured gallery_filter_google">
<td><a href="http://code.google.com/apis/visualization/documentation/gallery/geomap.html"><br />
    <img src="http://blog.securitymonks.com/wp-content/uploads/2010/04//icon-geomap.png" height="60" width="120" /></a></td>
<td><a class="gallery_doc_title" href="http://code.google.com/apis/visualization/documentation/gallery/geomap.html">Geo Map</a> (<a class="gallery_gwt_link" href="http://code.google.com/docreader/#p=gwt-google-apis&amp;s=gwt-google-apis&amp;t=Visualization">GWT Integrated</a>)</p>
<p class="gallery_description">A map of a country, continent, or region map, with colors and values assigned to specific regions. Values are displayed as a color scale, and you can specify optional hovertext for regions.</p>
<p class="gallery_author">By: Google</p>
</td>
</tr>
<tr class="gallery_filter_maps gallery_filter_featured gallery_filter_google">
<td><a href="http://code.google.com/apis/visualization/documentation/gallery/intensitymap.html"><br />
    <img src="http://blog.securitymonks.com/wp-content/uploads/2010/04/icon-intensitymap.png" height="60" width="120" /></a></td>
<td><a class="gallery_doc_title" href="http://code.google.com/apis/visualization/documentation/gallery/intensitymap.html">Intensity Map</a> (<a class="gallery_gwt_link" href="http://code.google.com/docreader/#p=gwt-google-apis&amp;s=gwt-google-apis&amp;t=Visualization">GWT Integrated</a>)</p>
<p class="gallery_description">An intensity map that highlights regions or countries based on relative values.</p>
<p class="gallery_author">By: Google</p>
</td>
</tr>
<tr class="gallery_filter_charts gallery_filter_google">
<td><a href="http://code.google.com/apis/visualization/documentation/gallery/linechart.html"><br />
    <img src="http://blog.securitymonks.com/wp-content/uploads/2010/04/icon-linechart.png" height="60" width="120" /></a></td>
<td><a class="gallery_doc_title" href="http://code.google.com/apis/visualization/documentation/gallery/linechart.html">Line Chart</a> (<a class="gallery_gwt_link" href="http://code.google.com/docreader/#p=gwt-google-apis&amp;s=gwt-google-apis&amp;t=Visualization">GWT Integrated</a>)</p>
<p class="gallery_description">Interactive line chart.</p>
<p class="gallery_author">By: Google</p>
</td>
</tr>
<tr class="gallery_filter_featured gallery_filter_charts gallery_filter_tables gallery_filter_analytics">
<td><a href="http://magic-table.googlecode.com/svn/trunk/magic-table/google_visualisation/example_1.html" onclick="return warn()"><br />
    <img src="http://blog.securitymonks.com/wp-content/uploads/2010/04/scatterplot_google_thumb.png" height="60" width="120" /></a></td>
<td><a href="http://magic-table.googlecode.com/svn/trunk/magic-table/google_visualisation/example_1.html" class="gallery_doc_title" onClick="return warn()">Magic-Table</a></p>
<p class="gallery_description">The Magic Table is a JavaScript library that allows you to see more in your data by applying some simple visual techniques to transform a table. The table is displayed in the browser by the canvas element. Internet Explorer is not supported.</p>
<p class="gallery_author">By: <a href="http://code.google.com/p/magic-table/">Greg Ross</a></p>
</td>
</tr>
<tr class="gallery_filter_maps gallery_filter_featured gallery_filter_google">
<td><a href="http://code.google.com/apis/visualization/documentation/gallery/map.html"><br />
    <img src="http://blog.securitymonks.com/wp-content/uploads/2010/04/icon-map.png" height="60" width="120" /></a></td>
<td><a class="gallery_doc_title" href="http://code.google.com/apis/visualization/documentation/gallery/map.html">Map</a> (<a class="gallery_gwt_link" href="http://code.google.com/docreader/#p=gwt-google-apis&amp;s=gwt-google-apis&amp;t=Visualization">GWT Integrated</a>)</p>
<p class="gallery_description">An interactive map that uses the <a href="http://code.google.com/apis/maps">Google Maps API</a>.</p>
<p class="gallery_author">By: Google</p>
</td>
</tr>
<tr class="gallery_filter_featured gallery_filter_charts gallery_filter_google">
<td><a href="http://code.google.com/apis/visualization/documentation/gallery/motionchart.html"><br />
    <img src="http://blog.securitymonks.com/wp-content/uploads/2010/04/icon-motionchart.png" height="60" width="120" /></a></td>
<td>
<p><a class="gallery_doc_title" href="http://code.google.com/apis/visualization/documentation/gallery/motionchart.html">Motion Chart</a> (<a class="gallery_gwt_link" href="http://code.google.com/docreader/#p=gwt-google-apis&amp;s=gwt-google-apis&amp;t=Visualization">GWT Integrated</a>)</p>
<p class="gallery_description">Motion Chart: A dynamic flash based chart to explore several indicators over time. Required columns: bubble name, time and 2 columns of numeric values. Optional columns: Numeric values or categories.</p>
<p class="gallery_author">By: Google</p>
</td>
</tr>
<tr class="gallery_filter_featured gallery_filter_google gallery_filter_project">
<td><a href="http://code.google.com/apis/visualization/documentation/gallery/orgchart.html"><br />
    <img src="http://blog.securitymonks.com/wp-content/uploads/2010/04/icon-orgchart.png" height="60" width="120" /></a></td>
<td><a class="gallery_doc_title" href="http://code.google.com/apis/visualization/documentation/gallery/orgchart.html">Organizational Chart</a></p>
<p class="gallery_description">A <a class="gallery_gwt_link" href="http://code.google.com/docreader/#p=gwt-google-apis&amp;s=gwt-google-apis&amp;t=Visualization">GWT Integrated</a> simple organizational chart.</p>
<p class="gallery_author">By: Google</p>
</td>
</tr>
<tr class="gallery_filter_charts">
<td><a href="http://parallel-coordinates.googlecode.com/svn/trunk/documentation/documentation.html" onclick="return warn()"><br />
    <img src="http://blog.securitymonks.com/wp-content/uploads/2010/04/parallelcords.jpg" height="60" width="120" /></a></td>
<td><a href="http://parallel-coordinates.googlecode.com/svn/trunk/documentation/documentation.html" class="gallery_doc_title" onClick="return warn()">Parallel Coordinates Chart</a></p>
<p class="gallery_description">Parallel Coordinates is a method of visualizing multivariate data. An n-dimensional space is represented as n parallel lines.  Works for browsers based on Gecko or Presto (does not work in IE). This is written in Javascript, no Flash required.</p>
<p class="gallery_author">By: <a href="http://sriharsha451.googlepages.com/">Sri Harsha Allamraju</a></p>
</td>
</tr>
<tr class="gallery_filter_charts gallery_filter_google">
<td><a href="http://code.google.com/apis/visualization/documentation/gallery/piechart.html"><br />
    <img src="http://blog.securitymonks.com/wp-content/uploads/2010/04/icon-piechart.png" height="60" width="120" /></a></td>
<td><a class="gallery_doc_title" href="http://code.google.com/apis/visualization/documentation/gallery/piechart.html">Pie Chart</a> (<a class="gallery_gwt_link" href="http://code.google.com/docreader/#p=gwt-google-apis&amp;s=gwt-google-apis&amp;t=Visualization">GWT Integrated</a>)</p>
<p class="gallery_description">Interactive pie chart.</p>
<p class="gallery_author">By: Google</p>
</td>
</tr>
<tr class="gallery_filter_featured gallery_filter_charts gallery_filter_fun">
<td><a href="http://visapi-gadgets.googlecode.com/svn/trunk/pilesofmoney/doc.html" onclick="return warn()"><br />
    <img src="http://visapi-gadgets.googlecode.com/svn/trunk/pilesofmoney/icon.png" height="60" width="120" /></a></td>
<td><a href="http://visapi-gadgets.googlecode.com/svn/trunk/pilesofmoney/doc.html" class="gallery_doc_title" onClick="return warn()">Piles of Money</a></p>
<p class="gallery_description">Column chart made of of money bills.</p>
<p class="gallery_author">By: The visapi project</p>
</td>
</tr>
<tr class="gallery_filter_charts gallery_filter_google">
<td><a href="http://code.google.com/apis/visualization/documentation/gallery/scatterchart.html"><br />
    <img src="http://blog.securitymonks.com/wp-content/uploads/2010/04/icon-scatterchart.png" height="60" width="120" /></a></td>
<td><a class="gallery_doc_title" href="http://code.google.com/apis/visualization/documentation/gallery/scatterchart.html">Scatter Chart</a> (<a class="gallery_gwt_link" href="http://code.google.com/docreader/#p=gwt-google-apis&amp;s=gwt-google-apis&amp;t=Visualization">GWT Integrated</a>)</p>
<p class="gallery_description">Interactive scatter chart.</p>
<p class="gallery_author">By: Google</p>
</td>
</tr>
<tr class="gallery_filter_google gallery_filter_tables">
<td><a href="http://code.google.com/apis/visualization/documentation/gallery/table.html"><br />
    <img src="http://blog.securitymonks.com/wp-content/uploads/2010/04/icon-table.png" height="60" width="120" /></a></td>
<td><a href="http://code.google.com/apis/visualization/documentation/gallery/table.html"  class="gallery_doc_title">Table</a> (<a class="gallery_gwt_link" href="http://code.google.com/docreader/#p=gwt-google-apis&amp;s=gwt-google-apis&amp;t=Visualization">GWT Integrated</a>)</p>
<p class="gallery_description">A highly customizable table with sorting, paging and selection capabilities.</p>
<p class="gallery_author">By: Google</p>
</td>
</tr>
<tr class="gallery_filter_featured gallery_filter_text">
<td><a href="http://visapi-gadgets.googlecode.com/svn/trunk/termcloud/doc.html" onclick="return warn()"><br />
    <img src="http://visapi-gadgets.googlecode.com/svn/trunk/termcloud/icon.png" height="60" width="120" /></a></td>
<td><a href="http://visapi-gadgets.googlecode.com/svn/trunk/termcloud/doc.html" class="gallery_doc_title" onClick="return warn()">TermCloud</a></p>
<p class="gallery_description">A list of terms, where the size and color of each word is determined by a specified frequency value (typically the number of times it appears in some text).</p>
<p class="gallery_author">By: The visapi project</p>
</td>
</tr>
<tr class="gallery_filter_featured gallery_filter_maps">
<td><img src="http://blog.securitymonks.com/wp-content/uploads/2010/04/thematicmapping.png" height="60" width="120" /></td>
<td><a href="http://thematicmapping.org/api/gvapi.php" class="gallery_doc_title" onClick="return warn()">Thematic Mapping API</a></p>
<p class="gallery_description">Enables visualization of data in Google Earth or other geobrowsers through the use of the Google Visualization API and KML.</p>
<p class="gallery_author"> By: <a href="http://thematicmapping.org/">Thematicmapping.org</a></p>
</td>
</tr>
<tr class="gallery_filter_text">
<td><a href="http://visapi-gadgets.googlecode.com/svn/trunk/wordcloud/doc.html" onclick="return warn()"><br />
    <img src="http://blog.securitymonks.com/wp-content/uploads/2010/04/worldcloud.png" height="60" width="120" /></a></td>
<td>
<p><a href="http://visapi-gadgets.googlecode.com/svn/trunk/wordcloud/doc.html" class="gallery_doc_title" onClick="return warn()">WordCloud</a>
      </p>
<p class="gallery_description">Displays all words in text with size and color based on the number of time each word appears.</p>
<p class="gallery_author">By: The visapi project</p>
</td>
</tr>
</table>
<p><h3>Additional Information</h3>
</p>
<p>
Below is the talk that Itai Raz, the lead engineer for the Visualization API product at Google, gave at <a href="http://code.google.com/events/io/2009/">Google I/O 2009</a> titled &#8220;Using the Visualization API with GWT:&#8221;
</p>
<p>
<object width="640" height="385"><param name="movie" value="http://www.youtube.com/v/5PV8OH-ML-Q&#038;color1=0xb1b1b1&#038;color2=0xcfcfcf&#038;hl=en_US&#038;feature=player_embedded&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowScriptAccess" value="always"></param><embed src="http://www.youtube.com/v/5PV8OH-ML-Q&#038;color1=0xb1b1b1&#038;color2=0xcfcfcf&#038;hl=en_US&#038;feature=player_embedded&#038;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="640" height="385"></embed></object>
</p>
<p><h3>Additional Possibilities</h3>
</p>
<p>
The work above is meant only to serve as a starting point.  There is a great deal more information to expand upon.  For example, we began this post pulling some information from the XML schema for CVE-2010-1228.  One field we did not pull out from the XML file is:
</p>
<p><pre>    &lt;vuln:cwe id="CWE-362" /&gt;
</pre>
</p>
<p>
The Common Weakness Enumeration (CWE) represents vulnerability types and NIST provides a <a href="http://nvd.nist.gov/cwe.cfm#cwes">CWE Cross Section Mapped into by NVD</a> table.  In the above example, we see an entry:
</p>
<table Border="1">
<tr>
<th>Name</th>
<th width="66">CWE-ID</th>
<th>Description</th>
</tr>
<tr>
<td>
<a name="CWE-362"/>Race Conditions
</td>
<td width="66">
<a href = "http://cwe.mitre.org/data/definitions/362.html" target = "blank">CWE-362</a>
</td>
<td>The state of a resource can change between the time the resource is checked to when it is accessed.</td>
</tr>
</table>
<p>
Clicking on the link will take us to the MITRE site that provides a great deal more information on CWE entries.  It is easy enough to expand on the above program to harvest this information for a richer information database.
</p>
<p>
Another possibility is to expand the above program to pull additional information on the CVE entry.  In additional to the data in the NVD CVE XML file, we could pull information from the NVD site.  Using CVE-2010-1228 as an example, we could have the program pull down the page:
</p>
<p><pre>http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2010-1228</pre>
</p>
<p>
Notice the line:
</p>
<p>
<span class="label">CVSS v2 Base Score:</span><a href="http://nvd.nist.gov/cvss.cfm?version=2&amp;name=CVE-2010-1228&amp;vector=(AV%3AN/AC%3AL/Au%3AN/C%3AC/I%3AC/A%3AC)" target="_blank">10.0</a> (HIGH) <a href="http://nvd.nist.gov/cvss.cfm?version=2&amp;name=CVE-2010-1228&amp;vector=(AV%3AN/AC%3AL/Au%3AN/C%3AC/I%3AC/A%3AC)" target="_blank">(AV:N/AC:L/Au:N/C:C/I:C/A:C)</a> (<a href="http://nvd.nist.gov/cvss.cfm?vectorinfo&amp;version=2" target="_blank">legend</a>)
</p>
<p>
The <b>(AV:N/AC:L/Au:N/C:C/I:C/A:C)</b> provides values that were used in determining the base score.  If you follow the link, you will see the values used in the calculations:
</p>
<ul>
<li><strong>CVSS Base Score</strong>: 10
<ul>
<li><b>Impact Subscore</b>: 10</li>
<li><b>Exploitability Subscore</b>: 10</li>
</ul>
</li>
<li><b>CVSS Temporal Score</b>: Undefined</li>
<li><strong>CVSS Environmental Score</strong>: Undefined</li>
<li><strong>Overall CVSS Score</strong>: 10</li>
</ul>
<p>
NVD has made available <a href="http://nvd.nist.gov/cvsseq2.htm">the equations</a> used in calculating the CVSS base score, temporal score, and environmental score.
</p>
<p>
Three other pieces of information that might provide interesting groupings are:
</p>
<ul>
<li><b>Access Complexity</b>:  Low  **NOTE: Access Complexity scored Low due to insufficient information</li>
<li><b>Authentication</b>:  Not required to exploit</li>
<li><b>Impact Type</b>:  Allows unauthorized disclosure of information; Allows unauthorized modification; Allows disruption of service</li>
</ul>
<p>
What information is of interest and how it is used will be dependent on your organization.  There is a great deal of information available and many directions you start examining.
</p>
<p><h3>Final Thoughts</h3>
</p>
<p>
I am often reminded of the old phrase, “Trust us, we are from the government.”   No one really trusts anyone, especially when it comes to matters they do not understand.  Just because you are from the security group at your organization, is that reason enough for the CEO to give you unlimited money and authority to do what you see fit?  Of course not.  While management might trust you, they may not believe that you are capable of seeing the big picture.  That is after all their job.
</p>
<p>
Another great old saying is that “the devil is in the details.”  Those details will likely fall in the security domain.  In organization across the planet there is a tug of war between the details and the big picture with multiple groups adding in their opinions and views.  You need to make the details understandable to your higher management to effectively argue your view.  Finding effective metrics and finding clear representation is essential in today&#8217;s business.  Google Visualization can be a useful tool in accomplishing this task.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.securitymonks.com/2010/04/16/google-visualization-an-example-graphing-nvd-cve-data/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>OMB Says Bring on the Clouds: Frightening or Funny?</title>
		<link>http://blog.securitymonks.com/2010/01/18/omb-says-bring-on-the-clouds-frightening-or-funny/</link>
		<comments>http://blog.securitymonks.com/2010/01/18/omb-says-bring-on-the-clouds-frightening-or-funny/#comments</comments>
		<pubDate>Mon, 18 Jan 2010 23:13:04 +0000</pubDate>
		<dc:creator>John Gerber</dc:creator>
				<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[Education]]></category>
		<category><![CDATA[Learning]]></category>
		<category><![CDATA[NIST]]></category>
		<category><![CDATA[OMB]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Policies]]></category>
		<category><![CDATA[SCAP]]></category>
		<category><![CDATA[Training]]></category>

		<guid isPermaLink="false">http://blog.securitymonks.com/?p=1743</guid>
		<description><![CDATA[Jason Miller, Executive Editor for FederalNewsRadio, write in his article, &#8220;Agencies to justify not using cloud computing to OMB&#8221; that OMB &#8220;will require agencies to develop an alternative analysis discussing how they could use cloud computing for all major technology projects for the fiscal 2012 budget.&#8221;  This is according to an internal budget documents [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.securitymonks.com/wp-content/uploads/2010/01/twisted_cloud_colored.jpg"><img src="http://blog.securitymonks.com/wp-content/uploads/2010/01/twisted_cloud.jpg" align="left" width=200 /></a><a href="http://www.linkedin.com/pub/jason-miller/4/375/6b6">Jason Miller</a>, Executive Editor for FederalNewsRadio, write in his article, &#8220;<a href="http://www.federalnewsradio.com/?sid=1836091&#038;nid=35">Agencies to justify not using cloud computing to OMB</a>&#8221; that OMB &#8220;will require agencies to develop an alternative analysis discussing how they could <b>use cloud computing for all major technology projects for the fiscal 2012 budget</b>.&#8221;  This is according to an internal budget documents obtained by FederalNewsRadio.  The document details OMB&#8217;s plans for such high-profile initiatives such as data center consolidation and the use of cloud computing and cybersecurity spending.</p>
<p>
Miller goes on to report that OMB will require &#8220;agencies <a href="http://www.federalnewsradio.com/?nid=35&#038;sid=1727634">launch a series of cloud computing pilots</a> across the government in 2010 using the E-Government Fund.&#8221;  In 2013, Miller reports, agencies must provide OMB &#8220;a complete alternatives analysis for mixed life cycle projects where agencies are spending new money-known as development, modernization and enhancement-and steady state or operations and maintenance funding for <b>how they could move to cloud computing</b>.&#8221;
</p>
<p>
Miller <a href="http://www.federalnewsradio.com/index.php?sid=1836879&#038;nid=35">quotes</a> a former government official as saying, &#8220;They are not saying use it, but are pushing us to look at it and do an analysis of alternatives and make a decision based on our business needs.  They are pushing us to look at it, yet giving us the ability to decide whether it makes sense.&#8221;
</p>
<p>
How well does your organization understand cloud computing?  How will security be handled?  What can you do to prepare?  During this time of tight budgets, maybe you do not have the funds and/or time to attend conferences and training events.  Fortunately, presentations are being posted regularly to the web, allowing you to keep informed on technological challenges.  For example, the <a href="http://www.zisc.ethz.ch/events/workshop2009">ZISC Workshop on Security in Virtualized Environments and Cloud Computing</a>, held September 10-11th in Zurich, recently posted all their presentations:
</p>
<table border=1>
<tr>
<td><a href="http://www.multimedia.ethz.ch/conferences/2009/zisc/?doi=10.3930/ETHZ/AV-3545ca74-af7d-4e37-8036-c6df21fe3c01">Welcome note</a></td>
<td><a href="http://www.csg.ethz.ch/people/plattner">Bernhard Plattner</a> and <a href="http://blog.zzamboni.org/">Diego Zamboni</a></td>
</tr>
<tr>
<td>Talk 1: <a href="http://www.multimedia.ethz.ch/conferences/2009/zisc/?doi=10.3930/ETHZ/AV-1e2160da-d654-4a1a-812f-aac874eb6523">Not Every Cloud has a Silver Lining</a></td>
<td><a href="http://www.technicalinfo.net/">Gunter Ollmann</a>, Damballa Inc., Atlanta GA, USA</td>
</tr>
<tr>
<td>Talk 2: <a href="http://www.multimedia.ethz.ch/conferences/2009/zisc/?doi=10.3930/ETHZ/AV-5acafdc1-fb1b-4cb9-9b3c-752db1c716db">Virtualization and Cloud Computing: Security’s Golden or Gilded Age</a></td>
<td><a href="http://www.linkedin.com/in/kskap">Kevin Skapinetz</a>, IBM Internet Security Systems, Atlanta GA, USA</td>
</tr>
<tr>
<td>Talk 3: <a href="http://www.multimedia.ethz.ch/conferences/2009/zisc/?doi=10.3930/ETHZ/AV-6256b225-9e82-41d2-a606-8404dfbca8af">Using virtualization technology for fault and intrusion tolerance</a></td>
<td><a href="http://homepages.lasige.di.fc.ul.pt/~hans/">Hans P. Reiser</a>, University of Lisbon, Portugal</td>
</tr>
<tr>
<td>Talk 4: <a href="http://www.multimedia.ethz.ch/conferences/2009/zisc/?doi=10.3930/ETHZ/AV-10c3d477-a04a-4ac9-ae67-3456849f1f8a">A survey of current security-related operating systems research</a></td>
<td><a href="http://people.inf.ethz.ch/troscoe/">Timothy Roscoe</a>, ETH Zurich, Switzerland</td>
</tr>
<tr>
<td>Talk 5: <a href="http://www.multimedia.ethz.ch/conferences/2009/zisc/?doi=10.3930/ETHZ/AV-8e677830-197a-437e-b008-f2222aa536e0">Of Cold Steam, Mist and Vapour: A View from the Inside of the Cloud</a></td>
<td><a href="http://www.hpl.hp.com/people/dirk_kuhlmann/">Dirk Kuhlmann</a>, HP Labs Bristol, UK</td>
</tr>
<tr>
<td>Talk 6: <a href="http://www.multimedia.ethz.ch/conferences/2009/zisc/?doi=10.3930/ETHZ/AV-b7b06dcf-fed5-498d-814e-7bd25d97a9db">New Cloud Computing challenges: the security impact in the “social” world</a>.</td>
<td><a href="http://it.linkedin.com/in/mvillari">Massimo Villari</a>, University of Messina, Italy</td>
</tr>
<tr>
<td>Talk 7: <a href="http://www.multimedia.ethz.ch/conferences/2009/zisc/?doi=10.3930/ETHZ/AV-f4eddba9-3747-4bbb-9603-703e250bcda7">Paradigms in virtualization based host security</a></td>
<td><a href="http://www.stanford.edu/~talg/">Tal Garfinkel</a>, VMware Inc., Palo Alto, CA, USA / Stanford University, Palo Alto CA, USA</td>
</tr>
<tr>
<td>Talk 8: <a href="http://www.multimedia.ethz.ch/conferences/2009/zisc/?doi=10.3930/ETHZ/AV-1cb82827-e827-462b-9ec1-80ec0076d5b0">Cloud Computing and Security: a Googley Perspective</a></td>
<td><a href="http://ch.linkedin.com/pub/peter-dickman/1/748/121">Peter Dickman</a>, Google Inc., Zurich, Switzerland</td>
</tr>
<tr>
<td>Talk 9: <a href="http://www.multimedia.ethz.ch/conferences/2009/zisc/?doi=10.3930/ETHZ/AV-9f03978d-9005-4c3c-a6c9-4e89a037adbb">A NIST Perspective on Cloud Computing</a></td>
<td><a href="http://www.zoominfo.com/people/Grance_Tim_63788691.aspx">Tim Grance</a>, National Institute of Standards and Technology, USA</td>
</tr>
<tr>
<td>Talk 10: <a href="http://www.multimedia.ethz.ch/conferences/2009/zisc/?doi=10.3930/ETHZ/AV-1fb853c4-f793-46b8-ad12-ffdef166204e">ENISA Risk Assessment of Cloud Computing – Preliminary Results</a></td>
<td><a href="http://www.hogben.eu/">Giles Hogben</a>, ENISA, EU</td>
</tr>
<tr>
<td>Talk 11: <a href="http://www.multimedia.ethz.ch/conferences/2009/zisc/?doi=10.3930/ETHZ/AV-90a68e85-a80f-405b-a4c3-473f40700971">Attack Graphs + Mechanically Generated Constraints</a></td>
<td><a href="http://www.zisc.ethz.ch/events/workshop2009/SpeakersBiosAbstracts.pdf">Lee Badger</a>, National Institute of Standards and Technology, USA</td>
</tr>
<tr>
<td><a href="http://www.multimedia.ethz.ch/conferences/2009/zisc/?doi=10.3930/ETHZ/AV-1c40fc7b-66c8-4386-b758-a91700bac0bc">Wrap-up and end</a></td>
<td>Bernhard Plattner and Diego Zamboni</td>
</tr>
</table>
<p>
Following NIST&#8217;s involvement in an area like cloud computing can help you judge the direction the government is heading.  Tim Grance presented at the <a href="http://scap.nist.gov/events/2009/itsac/presentations/">5th Annual IT Security Automation Conference and Expo Presentations</a> and the presentations have been made available.  Grance presented on the Security Content Automation Protocol (SCAP) (see my previous post &#8220;<a href="http://blog.securitymonks.com/2009/08/09/standardization-and-interoperability-in-security/">Standardization and Interoperability in Security</a>&#8221; for additional information on SCAP).  A cloud computing track consisting only of slides (no video) was also posted.  If lack of video does not concern you, the following conferences have posted slides on cloud security:</p>
<ul>
<li><a href="http://crypto.cs.stonybrook.edu/ccsw09/#program">CCSW 2009: The ACM Cloud Computing Security Workshop</a>, held November 13th, 2009 in Chicago.</li>
<li>Digital Government Institute&#8217;s <a href="http://federalcloudcomputing.wik.is/December_9,_2009">Cloud Computing 2010: Focus on Operational Efficiency and Security</a>, held December 9, 2009.</li>
<li><a href="http://federalcloudcomputing.wik.is/December_10%2c_2009">Cloud Interoperability Roadmaps Session</a> held in Long Beach, CA on December 10, 2009.</li>
</ul>
<p>If you prefer to listen and do not need to see slides, Tim Grance can be heard on Dana Gardner&#8217;s BriefingsDirect podcast, &#8220;<a href="http://www.briefingsdirect.com/index.php?post_id=514596">Panel Discussion: Is Cloud Computing More or Less Secure than On-Premises IT?</a>.&#8221;  The discussion includes a panel of all stars from the cloud security community, including <a href="http://blogs.sun.com/gbrunett/">Glenn Brunette</a>, distinguished engineer and chief security architect at Sun Microsystems and founding member of the Cloud Security Alliance (CSA); <a href="http://www.linkedin.com/pub/doug-howard/1/b62/239">Doug Howard</a>, chief strategy officer of Perimeter eSecurity and president of USA.NET; <a href="http://www.rationalsurvivability.com/blog/">Christofer Hoff</a>, technical adviser at CSA and director of Cloud and Virtualization Solutions at Cisco Systems; and <a href="http://www.enomaly.com/Management.432.0.html">Dr. Richard Reiner</a>, CEO of Enomaly.  The podcast was recorded at the <a href="http://www.opengroup.org/toronto2009-apc/">Open Group’s 23rd Enterprise Architecture Practitioners Conference</a> in Toronto on July 20-22, 1009, along with:</p>
<ul>
<li><a href="http://www.briefingsdirect.com/index.php?post_id=527007">Jericho Forum Aims to Guide Enterprises Through Risk Mitigation Landscape for Cloud Adoption</a> where Dana interviews Steve Whitlock, a member of the Jericho Board of Management.</li>
<li><a href="http://www.briefingsdirect.com/index.php?post_id=526087">Cloud and Security Join Boundaryless Information as Top-of-Mind Issues for The Open Group</a> where Dana talked with <a href="http://www.opengroup.org/contacts/bios/brown_bio.htm">Allen Brown</a>, president and CEO of The Open Group.</li>
<li><a href="http://www.briefingsdirect.com/index.php?post_id=521463">XDAS Standard Aims to Empower IT Audit Trails from Across Complex Events</a> where Dana talks with <a href="Ian Denis Dobson">Ian Dobson</a>, director of the Security Forum for The Open Group, as well as <a href="http://ch.linkedin.com/pub/jo%C3%ABl-winteregg/1/160/867">Joël Winteregg</a>, CEO and co-founder of NetGuardians.  XDAS is an open-source standard that is hopefully going to help in compliance and regulatory issues and in the automation of heterogeneous environments.</li>
<li><a href="http://www.briefingsdirect.com/index.php?post_id=519708">New Era Enterprise Architects Need Sweeping Skills to Straddle the IT-Business Alignment Chasm</a> where Dana is joined by <a href="http://www.theopengroup.org/contacts/bios/deraeve_bio.htm">James de Raeve</a>, vice president of certification at The Open Group; <a href="http://www.theopengroup.org/contacts/bios/fehskens_bio.htm">Len Fehskens</a>, vice president, Skills and Capabilities at The Open Group; <a href="http://www.footepartners.com/FPbiographies.htm">David Foote</a>, CEO and co-founder, as well as chief research officer, at <a href="http://www.footepartners.com/about_foote_partners_llc.htm">Foote Partners</a>, and <a href="http://www.opengroup.org/member/member-spotlight-uppal.htm">Jason Uppal</a>, chief architect at <a href="http://www.quickresponse.ca/">QRS</a>.</li>
<li><a href="http://www.briefingsdirect.com/index.php?post_id=512686">Cloud Pushes Enterprise Architects&#8217; Scope Beyond IT into Business Process Optimization Role</a> where Dana is joined by <a href="http://eadirections.wordpress.com/">Tim Westbrock</a>, managing director of <a href="http://www.eadirections.com/">EAdirections</a>; <a href="http://www.column2.com/about/">Sandy Kemsley</a>, an independent IT analyst and architect; and <a href="http://www.linkedin.com/in/johngotze">John Gotze</a>, international president for the <a href="http://www.aeaassociation.org/">Association of Enterprise Architects</a>.</li>
</ul>
<p>
For more video presentations on the cloud security, awhile back I posted &#8220;<a href="http://blog.securitymonks.com/2008/03/04/cert-cerias-and-google-video-training-online/">CERT, CERIAS, the Academy, and Google Video: Training Online</a>.&#8221;  Two other sources include the <a href="http://www.securitytube.net">SecurityTube</a> and <a href="http://oreilly.com/webcasts/">O&#8217;Reilly Webcasts</a>.  Below are a few examples of the presentations available:</p>
<ul>
<li><b><a href="http://www.securitytube.net/The-Belgian-Beer-Lovers-Guide-to-Cloud-Security-(Brucon-2009)-video.aspx">The Belgian Beer Lovers Guide to Cloud Security (Brucon 2009) Tutorial</a></b> by Craig Balding at Brucon 2009: In this presentation Craig covers why talking about &#8220;cloud&#8221; is akin to walking into a Belgian bar and asking for &#8220;beer&#8221;; the common cloud architectures and their implications for you &#8211; the security dude; what the beer brewing Trappist Monks can teach us about cloud security; attacking clouds (aka getting free beer); and dealing with the hangover: cloud incident response &#038; forensics.</li>
<li><b><a href="http://www.securitytube.net/Evolution-of-Security-(Fsecure)-video.aspx">Evolution of Security (Fsecure) Tutorial</a></b> by F-Secure: an animated series on the various threats out there on the Internet and also talks about their state of the art AV (self promotion) <img src='http://blog.securitymonks.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  They also talk about &#8220;cloud security&#8221; and how the next generation AV will be in the cloud and not isolated.</li>
<li><b><a href="http://www.securitytube.net/Cloud-Security-and-Privacy-(O%27Reilly-Webcast)-video.aspx">Cloud Security and Privacy</a></b> by Tim Mather, Subra Kumaraswamy, Shahed Latif: discusses cloud computing&#8217;s SPI delivery model, and its impact on various aspects of enterprise information security (e.g., infrastructure, data, identity and access management, security management), privacy, and compliance. Security-as-a-Service and the impact of cloud computing on corporate IT is also discussed.</li>
<li><b><a href="http://www.youtube.com/watch?v=189Nbc57_gg">Architecting Applications for the Cloud</a></b> by Jorge Noa: This presentation analyzes aspects of the Amazon EC2 IaaS cloud environment that differ from a traditional data center and introduces general best practices for ensuring data privacy, storage persistence, and reliable DBMS backup.</li>
<li><b><a href="http://www.oreillynet.com/pub/e/1372">Cloud Computing: The Next Frontier for Open Source</a></b> by <a herf="http://www.oreillynet.com/pub/au/1301">Bernard Golden</a>: discusses how the trends of open source and cloud computing reinforce one another, and why cloud computing is a significant driver of enterprise open source adoption.</li>
<li><b><a href="http://www.oreillynet.com/pub/e/1289">Getting Started with Amazon Web Services</a></b> by <a href="http://www.oreillynet.com/pub/au/429>George Reese</a>: Author of Cloud Application Architectures and enStratus founder and CTO provides this introduction into establishing a cloud infrastructure through Amazon Web Services.</li>
<li><b><a href="http://www.oreillynet.com/pub/e/1515">Cloud Security Deep Dive</a></b> by Subra Kumaraswamy, Shahed Latif, Tim Mather: will take a deep dive into cloud security issues and focus on three specific aspects: (1) data security; (2) identity management in the cloud, and; (3) governance in the cloud (in the context of managing a cloud service provider with respect to security obligations). Each of these three topics will be covered in a 30 minute segment that will include a presentation and Q&#038;A with the audience.</li>
<li><b><a href="http://www.securitytube.net/Cloudburst-(Hacking-3D-and-Breaking-Out-of-VMware)-Blackhat-2009-video.aspx">Cloudburst (Hacking 3D and Breaking Out of VMware)  Blackhat 2009</a></b> by Kostya Kortchinsky: VMware products include implement a lot of functionality, and as such have a decent chance to include some bugs. CLOUDBURST is the combination of 3 of those found in the virtualized video device (more specifically the 3D code). Combined, these allow a user in a Guest to execute code on the Host. Since the virtualized device code is the same for all the branches of the products, this impacts Workstation, as well as Fusion or ESX. Immunity, Inc. will present the various vulnerabilities and the techniques used to exploit the bug reliably, even on platforms with ASLR or DEP such as Vista SP1. Once exploited, Immunity will demonstrate how to establish MOSDEF between the Host and Guest.</li>
<li><b><a href="http://www.cerias.purdue.edu/news_and_events/events/calendar/cerias_event.php?uid=msm30u10kp4vh3cf340iqjug2k@google.com">Virtualization: Resource Coupling and Security across the Stack</a></b> by Dennis Moreau, Configuresoft: The session briefly addressed extension to the cloud and utility computing infrastructures to address how to use configuration and behavioral information to address the increased complexity of security, compliance and risk assessment in virtualized environments.</li>
</ul>
<p>Other <a href="http://blog.brucon.org/">BruCON</a> Security Conference (held September 18-19, 2009) videos are available at <a href="http://vimeo.com/channels/61997#6897223">their vimeo channel</a>.  O&#8217;Reilly maintains on YouTube an <a href="http://www.youtube.com/oreillymedia#p/c/30603FE448DB8FA1">O&#8217;Reilly Media Channel</a> along with an area to sign up for <a href="http://oreilly.com/webcasts/">future webcasts</a>.  <a href="http://www.blackhat.com/html/bh-dc-09/bh-dc-09-archives.html">Blackhat DC 2009</a> video, audio, whitepapers, and slides are also available.  Content is ever changing, so keep checking the sites.
</p>
<p>
Remember that <a href="http://en.wikipedia.org/wiki/Vivek_Kundra">Vivek Kundra</a>, Chief Information Officer (CIO) of the United States of America, outlined as his team&#8217;s <a href="http://www.fedscoopevents.com/upcoming-events.php">priorities</a>:</p>
<ol>
<li>Innovation</li>
<li>Lowering the cost of Government</li>
<li>Transparency</li>
<li>Engaging Citizens</li>
<li>Ensuring a safe computing environment</li>
</ol>
<p>In response, <a href="http://fedscoopevents.com/">FedScoop!</a> started hosting one event each quarter around these pillars.  On October 14 at the Newseum, they did their first event bringing together executives in the White House and federal CIO’s, CTO’s, and decision-makers to talk about <a href="http://www.vimeo.com/7529048">lowering the cost of government with technology</a>.  Check out the video of the <a href="http://www.vimeo.com/7529894">Cyber Security Panel</a>.  Since one of the topics was cloud computing, FedScoop! scheduled a follow-up event.  On December 9th, 2009, they hosted and posted the &#8220;<a href="http://www.vimeo.com/8066838">Cloud Computing Shoot Out</a>.&#8221;
</p>
<p>
FederalNewsRadio has posted a <a href="http://www.federalnewsradio.com/?nid=50&#038;sid=1662577">three part video series</a> on secure cloud computing.  The panelists include <a href="http://www.linkedin.com/pub/jim-flyzik/2/1a0/10">Jim Flyzik</a>, President of the Flyzik Group; <a href="http://henrysienkiewicz.com">Henry Sienkiewicz</a>, Technical Program Director, Computer Services, Defense Information Systems Agency; <a href="http://www.linkedin.com/pub/ron-bechtold/7/8bb/b2a">Ronald Bechtold</a>, Army Architecture Integration Center at Headquarters, Department of the Army, Chief Information Office/G6; <a href="http://www.linkedin.com/pub/curt-aubley/0/a97/897">Curt Aubley</a>, Chief Technology Officer CTO Operations &#038; Next Generation Solutions, Lockheed Martin Information Systems &#038; Global Services; <a href="http://www.linkedin.com/pub/dale-wickizer/2/218/4a9">Dale Wickizer</a>, Chief Technology Officer-Public Sector, NetApp, Inc.; and <a href="http://www.linkedin.com/pub/aileen-black/9/537/6a1">Aileen Black</a>, Vice President of Public Sector VMware Inc.
 </p>
<p>
CNET&#8217;s editor of Webware, <a href="http://www.cnet.com/profile/rafe/">Rafe Needleman</a> and senir writer <a href="http://news.cnet.com/underexposed/">Stephen Shankland</a> talked with Christofer Hoff on the Reporters&#8217; Roundtable podcast about the &#8220;<a href="http://www.cnet.com/8301-30976_1-10382405-10348864.html?tag=mncol;title">Dangers of Cloud Computing</a>.&#8221;  Chris also presented at Microsoft&#8217;s <a href="http://technet.microsoft.com/en-us/security/ee460903.aspx">BlueHat</a>, &#8220;<a href="http://technet.microsoft.com/en-us/security/ee834911.aspx">Cloudifornication: Indiscriminate Information Intercourse Involving Internet Infrastructure</a>.&#8221;  Any presentation with such a great title must be watched.  There is a <a href="View an interview with Chris Hoff">short interview</a> with Chris from Bluehat.
</p>
<p>
One of my favorite stories of Abraham Lincoln involved the <a href="http://www.lib.niu.edu/ipo/1995/ihy950230.html">McCormick-Manny case</a> of 1855 where Lincoln was one of Manny’s lawyers.  Lincoln basically was pushed aside and humiliated.  After the trial, he told Ralph Emerson, a young lawyer who was present at the trial, “I am going home. I am going home to study law.” Emerson asked, “Mr. Lincoln, you stand at the head of the bar in Illinois now! What are you talking about?” Lincoln replied, “Ah, yes, I do occupy a good position there, and I think that I can get along with the way things are done there now. But these college-trained men, who have devoted their whole lives to study, are coming West, don’t you see? And they study their cases as we never do. They have got as far as Cincinnati now. They will soon be in Illinois.” Emerson stated Lincoln turned to him, his countenance suddenly assuming that look of strong determination which those who knew him best sometimes saw upon his face, and said, “I am going home to study law! I am as good as any of them, and when they get out to Illinois, I will be ready for them.&#8221;</p>
<p />
<p>
Change is coming.  If you try just to get along, the future will overwhelm you.  While we do not live in a world of unlimited funds for conferences and training, people are sharing a wealth of information.  Take advantage of it and get ready for whatever might be heading your way.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.securitymonks.com/2010/01/18/omb-says-bring-on-the-clouds-frightening-or-funny/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Implementing a Web Application Firewall with ModSecurity</title>
		<link>http://blog.securitymonks.com/2008/07/31/implementing-a-web-application-firewall-with-modsecurity/</link>
		<comments>http://blog.securitymonks.com/2008/07/31/implementing-a-web-application-firewall-with-modsecurity/#comments</comments>
		<pubDate>Fri, 01 Aug 2008 04:02:27 +0000</pubDate>
		<dc:creator>John Gerber</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[Defense in Depth]]></category>
		<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[ModSecurity]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Web Application]]></category>

		<guid isPermaLink="false">http://blog.securitymonks.com/?p=169</guid>
		<description><![CDATA[There are a few topics I have meant to do a post on for awhile.  Sometimes having too much interest and information on a topic can be a bad thing.  Wanting to pull various postings and articles along with implementation instructions can be a bit time consuming.  Plus, in order to demonstrate [...]]]></description>
			<content:encoded><![CDATA[<p><img src="/images/modsecurity.gif" alt="ModSecurity Image" align="left"/>There are a few topics I have meant to do a post on for awhile.  Sometimes having too much interest and information on a topic can be a bad thing.  Wanting to pull various postings and articles along with implementation instructions can be a bit time consuming.  Plus, in order to demonstrate why someone might be interested in implementing a web application firewall (<a href="http://www.owasp.org/index.php/Web_Application_Firewall">WAF</a>), I envisioned a post discussing the collapse of the perimeter and addressing points made by the <a href="http://www.opengroup.org/jericho/">Jericho Forum</a> (see the <a href="http://www.securitycatalyst.com/blog/2008/06/security-roundtable-for-june-2008-clarion-call-of-the-jericho-forum/">Security Roundtable</a> podcast for June 2008 for a good discussion on the topic).  <a href="http://raffy.ch/blog/">Raffael Marty</a> makes excellent points in his soon to be released book, &#8220;<a href="http://www.amazon.com/Applied-Security-Visualization-Raffael-Marty/dp/0321510100">Applied Security Visualization</a>&#8220;:</p>
<blockquote><p>The crime landscape is shifting.  Attacks are moving up the network stack.  Network-based attacks are not the prime source of security problems anymore.  The attacks today are moving into the application layer: Web 2.0, instant messenger attacks, fraud, information theft, and crime-ware are just some examples of new types of attacks that generate a load of data to be collected and analyzed.  Beware!  Applications are really chatty and generate alot of data.</p></blockquote>
<p>While my current post is not about security visualization (see earlier post &#8220;<a href="http://blog.securitymonks.com/2007/10/20/security-data-visualization/">Security Data Visualization</a>&#8220;), I would like to point out that <a href="http://davix.secviz.org">DAVIX</a>, a live CD for data analysis and visualization, is expected to be released August 6th.  That should be really cool and fun.</p>
<p>
Since application security is a topic of interest for me, I ran into the problem of having too many topics I wanted to discuss when I started trying to write a post on <a href="http://www.modsecurity.org/">ModSecurity</a>, an open source, free WAF Apache module.  Today, rather than waiting for me to integrate the information, I decided to move ahead and do the post while limiting myself to only pointing out the various sources.  The reader can follow the links for a more in-depth discussion and understanding on the topic.</p>
<h3>Why You Should Care</h3>
<p>The <a href="http://itradio.com.au/security/">Risky Business</a> podcast has come to be one of my favorite podcasts.  The host, <a href="http://itradio.com.au/security/?page_id=2">Patrick Gray</a> and regular guest <a href="http://www.zdnet.com.au/tag/munir_kotadia.htm">Munir Kotadia</a>, just cracks me up.  Plus the show is informative and features great guests.  This week&#8217;s show had an interview with <a href="http://itradio.com.au/security/?p=85">H D Moore talking about the DNS bug</a>.  Timely and informative; what else can one ask for?  The <a href="http://itradio.com.au/security/?p=81">68th episode</a>, done at the beginning of this month, had an interview with <a href="http://jeremiahgrossman.blogspot.com/">Jeremiah Grossman</a> concerning web application firewalls.  As Patrick writes in the show notes, &#8220;<em>it takes typical organizations around <strong>130 days to fix sequel injection bugs</strong> in code.  But you can mitigate these sorts of things with a Web app firewall, and you won’t even have to deal with the development team! Hooray!</em>.&#8221;
</p>
<p>
In Grossman&#8217;s blog post &#8220;<a href="http://jeremiahgrossman.blogspot.com/2008/06/can-wafs-protect-against-business-logic.html">Can WAFs protect against business logic flaws?</a>&#8220;, he pointed out that &#8220;<em>WAFs don&#8217;t defend against every logic flaw, or even every crazy form of SQLi or XSS. Just as white/black box scanners can&#8217;t identify every vulnerability and neither can expert pen-testers or source code auditors</em>.&#8221;  Stuart King, in his article, &#8220;<a href="http://www.computerweekly.com/blogs/stuart_king/2008/07/more-wafs.html">Larry David and Web Application Firewalls</a>&#8220;, builds upon this idea when he wrote:</p>
<blockquote><p>Back to the <a href="http://www.csoonline.com/article/412163/Industry_View_Web_Application_Security_Today_Are_We_All_Insane_/1">CSO article</a> where the point is made that we are sitting on a huge legacy of insecure code and that &#8220;we can&#8217;t rewrite history.&#8221; So, the argument is that a web application firewall mitigates the risk &#8211; note: does not solve the problem &#8211; until the code can be replaced.</p>
<p>How much of the risk is mitigated is open to debate, but there are lots of other things to consider too. For instance the cost of redeveloping code against the cost of purchasing and supporting a WAF. We also need to consider the value and risk profile of the product. </p></blockquote>
<p>Today&#8217;s world consist of attackers adjusting focus from network-based attacks to the application layer.  Grossman in his post &#8220;<a href="http://jeremiahgrossman.blogspot.com/2008/03/website-security-strategies-that-work.html">Website Security Strategies that Work</a>&#8221; makes the claim that &#8220;<em><strong>9 out of 10 (or more) websites have vulnerabilities</strong> as a result of being built by those who didn’t know or appreciate the severity of today’s attacks</em>.&#8221;  There is no arguing that many organizations are sitting on a huge legacy of insecure code, much of which may have been written before the discovery of prevalent vulnerabilities such as <a href="http://ha.ckers.org/xss.html">XSS</a>, <a href="http://ha.ckers.org/sqlinjection/">SQL Injection</a>, <a href="http://ha.ckers.org/blog/20080202/csrf-yup-its-real-folks/">CSRF</a>, etc.  Even worse, organization often have their security groups focused on network or system security, leaving application level security to developers.  Unfortunately, these developers are receiving little or no training, while remaining under pressure to produce code under short deadlines.
</p>
<p>
Andre Gironda series, starting with &#8220;<a href="http://www.tssci-security.com/archives/2008/06/23/week-of-war-on-wafs-day-1-top-ten-reasons-to-wait-on-wafs/">Week of War on WAF’s: Day 1 — Top ten reasons to wait on WAF’s,</a>&#8221; provides important reasons why WAFs should not be viewed as a silver bullet solution.  Rich Mogull in his post &#8220;<a href="http://securosis.com/2008/06/02/web-application-security-we-need-web-application-firewalls-to-work-better/">Web Application Security: We Need Web Application Firewalls To Work. Better</a>&#8221; makes the important point:<br />
<blockquote>With old school vulnerabilities we know the details of the specific vulnerability and (usually) exploit mechanism. With WAFs, we are trying to block vulnerability classes instead of specific vulnerabilities. This is a HUGE difference. The WAF doesn’t know the details of the application or any application-specific vulnerabilities, and thus is much more limited in what it can block.</p></blockquote>
<p>Mogull goes on to state that WAFs can:<br />
<blockquote>no longer be merely external boxes protecting against generic vulnerabilities; they need tighter integration into our applications. In the long term, I’ve branded this Application and Database Monitoring and Protection (<a href="http://securosis.com/2007/12/17/definitions-content-monitoring-and-protection-and-application-and-database-monitoring-and-protection/">ADMP</a>) as we create a dedicated application and database security stack that links from the browser on the front end, to the DB server on the back.</p></blockquote>
<p>ADMPs, or if you prefer WAFs + Database Activity Monitoring (WAFs+DAM),  would be another step in the evolution of WAFs.  As <a href="http://www.ivanristic.com/">Ivan Ristic</a>, creator of ModSecurity, points out in his blog post &#8220;<a href="http://blog.modsecurity.org/2008/05/whats-the-score.html">What&#8217;s the Score of the Game?</a>&#8220;:<br />
<blockquote>I feel that one of areas where organizations are failing, with regards to web application security, is that there is a lack of communication between the following three groups: Development teams (who are running source code reviews), InfoSec teams (who are running vulnerability scans) and Operational Security teams (who are running web application firewalls).  These three teams each have unique perspectives on the vulnerabilities of the webapps and they should share their data with each other.</p></blockquote>
<p>Nicely stated.  No one is arguing that writing secure code is not the answer.  If organization began adapting secure systems development lifecycle (<a href="https://buildsecurityin.us-cert.gov/daisy/bsi/articles/knowledge/sdlc/326-BSI.html">SDLC</a>) models into their business operation, many security problems would go away.  Building secure software will require changes in the current development culture, which will include people, processes, and technology.  No small task.
</p>
<p>
Gunnar Peterson has a nice post, &#8220;<a href="http://1raindrop.typepad.com/1_raindrop/2006/09/waf_and_xsg_ris.html">WAF and XSG Risk and Effectiveness at 20,000 feet</a>&#8221; where he discusses modeling of combination of risk and effectiveness to identify areas of focus.  As Peterson <a href="http://1raindrop.typepad.com/1_raindrop/2006/01/defense_in_dept.html">points out in another post</a>, &#8220;<em>WAFs are not as static as network firewalls&#8230;Instead WAFs collaborate much more directly with development, which is another growth opportunity for security industry</em>.&#8221;
</p>
<p>
This post is going to stay focused on WAFs.  With it taking on average 130 days to fix sequel injection bugs, organizations need something they can implement today.  WAFs have an important role to play in adding a layer of security and monitoring to a <a href="https://buildsecurityin.us-cert.gov/daisy/bsi/articles/knowledge/principles/347-BSI.html">defense in depth security approach</a>.  WAFs will evolve.  They are in the process of evolving now.  Understanding the fundamental ideas and going through the implementation of an open source solution starts us on the path of better understanding of future technologies.</p>
<h3>An Implementation Using ModSecurity</h3>
<p>Building on previous posts concerning &#8220;<a href="http://blog.securitymonks.com/2008/04/14/an-apache-implementation/">An Apache Implementation</a>&#8220;, &#8220;<a href="http://blog.securitymonks.com/2008/04/21/php-implementation/">PHP Implementation</a>&#8220;, and &#8220;<a href="http://blog.securitymonks.com/2008/04/24/apache-and-openssl/">Apache and OpenSSL</a>&#8220;, we have an Apache web server setup to build upon.  For additional details, please get Ivan Ristic&#8217;s book, &#8220;<a href="http://www.apachesecurity.net/">Apache Security</a>.&#8221;  It really is a must have book for anyone serious about running an Apache web server.   Ristic also maintains the ModSecurity <a href="http://www.modsecurity.org/">website</a> and <a href="http://blog.modsecurity.org/">blog</a>, which serves as a great source for up-to-date information on ModSecurity.
</p>
<p>
The Apache module <a href="http://httpd.apache.org/docs/2.2/mod/mod_unique_id.html">mod_unique_id</a> needs to be installed for  ModSecurity to work properly.  This module was not installed when we configured Apache.  At that time, we did not know we needed it.  While it can be somewhat inconvenient, for security reasons it is best not to install modules not needed.</p>
<h4><strong>1.  Stop Apache Server.</strong></h4>
</p>
<p><table width="100%" cellpadding="0" cellspacing="1" border="1">
<td class="code-outline" BGCOLOR="#F5F5F5">
<pre class="displaycode">
# /usr/local/apache/bin/apachectl stop
</pre>
</td>
</table>
<p></p>
<h4><strong>2.  Install mod_unique_id Module.</strong></h4>
<p>For non Mac OS X, do the following:</p>
<table width="100%" cellpadding="0" cellspacing="1" border="1">
<td class="code-outline" BGCOLOR="#F5F5F5">
<pre class="displaycode">
root# cd /usr/local/src/httpd-2.2.8
/usr/local/src/httpd-2.2.8 root# make clean
/usr/local/src/httpd-2.2.8 root# CC=gcc \
CFLAGS="-O3 -fno-omit-frame-pointer" \
./configure --prefix=/usr/local/apache \
--enable-rewrite \
--enable-so \
--disable-imap \
--disable-userdir --with-mpm=worker --enable-ssl --enable-unique-id --enable-unique-id
/usr/local/src/httpd-2.2.8 root# make
/usr/local/src/httpd-2.2.8 root# make install
</pre>
</td>
</table>
<p> <br />
For Mac OS X, please do:</p>
<table width="100%" cellpadding="0" cellspacing="1" border="1">
<td class="code-outline" BGCOLOR="#F5F5F5">
<pre class="displaycode">
root# cd /usr/local/src/httpd-2.2.8
/usr/local/src/httpd-2.2.8 root# make clean
/usr/local/src/httpd-2.2.8 root# CC=gcc \
CFLAGS="-O3 -fno-omit-frame-pointer" \
LDFLAGS="-L/opt/local/lib -L/usr/lib" \
./configure --prefix=/usr/local/apache --enable-rewrite \
--enable-so --disable-imap --disable-userdir \
--with-mpm=worker --enable-ssl --enable-unique-id
/usr/local/src/httpd-2.2.8 root# make
/usr/local/src/httpd-2.2.8 root# make install
</pre>
</td>
</table>
<p>   </p>
<h4><strong>3.  Install <a href="http://www.pcre.org/">PCRE</a>.</strong></h4>
<p>Only under Mac OS X did I have to install Perl Compatible Regular Expressions (PCRE).  You may be able to skip this step, depending on your OS.</p>
<table width="100%" cellpadding="0" cellspacing="1" border="1">
<td class="code-outline" BGCOLOR="#F5F5F5">
<pre class="displaycode">
root# cd /usr/local/src
/usr/local/src root# wget http://downloads.sourceforge.net/pcre/pcre-7.7.tar.gz
/usr/local/src root# tar xzf pcre-7.7.tar.gz
/usr/local/src root# cd pcre-7.7
/usr/local/src/pcre-7.7 root# CC=gcc \
CFLAGS="-O3 -fno-omit-frame-pointer" \
LDFLAGS="-L/opt/local/lib -L/usr/lib" \
./configure
/usr/local/src/pcre-7.7 root# make
/usr/local/src/pcre-7.7 root# make test
/usr/local/src/pcre-7.7 root# make install
</pre>
</td>
</table>
<p>   </p>
<h4><strong>4.  Install the latest version of <a href="http://xmlsoft.org/downloads.html">libxml2</a> or <a href="http://www.lua.org/download.html">Lua</a>.</strong></h4>
<p>To quote wikipedia, <a href="http://en.wikipedia.org/wiki/Libxml2">libxml</a> is &#8220;<em>a library for parsing XML documents</em>&#8221; and <a href="http://en.wikipedia.org/wiki/Lua_(programming_language)">Lua</a> is &#8220;<em>a lightweight, reflective, imperative and procedural programming language, designed as a scripting language with extensible semantics as a primary goal</em>.&#8221; ModSecurity requires dynamic libraries which are not built by default in the source distribution.  Binary distribution is recommended.
</p>
<p>
I will go through configuration and installation of libxml2 from source and the binary installation of lua under Mac OS X.   There is a good chance if you are running a different OS, the libraries will have already been installed. </p>
<table width="100%" cellpadding="0" cellspacing="1" border="1">
<td class="code-outline" BGCOLOR="#F5F5F5">
<pre class="displaycode">
root# cd  /usr/local/src/
/usr/local/src root# wget ftp://xmlsoft.org/libxml2/libxml2-2.6.32.tar.gz
/usr/local/src root# tar xzf libxml2-2.6.32.tar.gz
/usr/local/src root# cd libxml2-2.6.32
/usr/local/src/cd libxml2-2.6.32 root#  CC=gcc \
CFLAGS="-O3 -fno-omit-frame-pointer" \
LDFLAGS="-L/opt/local/lib -L/usr/lib" \
/usr/local/src/cd libxml2-2.6.32 root# ./configure
/usr/local/src/cd libxml2-2.6.32 root# make
/usr/local/src/cd libxml2-2.6.32 root# make install
/usr/local/src/cd libxml2-2.6.32 root# cd ..
/usr/local/src root# wget http://luaforge.net/frs/download.php/3097/lua5_1_3_Darwin811x86_lib.tar.gz
/usr/local/src root# mkdir lua
/usr/local/src root# cd lua
/usr/local/src/lua root# tar xzf lua5_1_3_Darwin811x86_lib.tar.gz
/usr/local/src/lua root# cp liblua5.1.* /usr/local/lib
/usr/local/src/lua root# cp include/* /usr/local/include
</pre>
</td>
</table>
<p></p>
<h4><strong>5.  Download, unpack, configure, and compile <a href="http://www.modsecurity.org/download/direct.html">ModSecurity</a>.</strong></h4>
<p>If you are interested in connecting a ModSecurity sensor to the central audit log repository, you will want to build the ModSecurity Log Collector below with the command &#8220;make mlogc&#8221;.  Install instructions can be found under apache2/mlogc-src directory.  That step will not be included below.</p>
<table width="100%" cellpadding="0" cellspacing="1" border="1">
<td class="code-outline" BGCOLOR="#F5F5F5">
<pre class="displaycode">
root# cd  /usr/local/src/
/usr/local/src root# wget http://www.modsecurity.org/download/modsecurity-apache_2.5.5.tar.gz
/usr/local/src root# tar xzf modsecurity-apache_2.5.5.tar.gz
/usr/local/src root# cd modsecurity-apache_2.5.5
/usr/local/src/modsecurity-apache_2.5.5 root# cd apache2
</pre>
</td>
</table>
<p>
For non Mac OS X, configure with the command:</p>
<table width="100%" cellpadding="0" cellspacing="1" border="1">
<td class="code-outline" BGCOLOR="#F5F5F5">
<pre class="displaycode">
/usr/local/src/modsecurity-apache_2.5.5/apache2 root# ./configure \
--with-apxs=/usr/local/apache/bin/apxs \
--with-apr=/usr/local/apache/bin \
--with-apu=/usr/local/apache/bin
</pre>
</td>
</table>
<p>
For Mac OS X, use the command:</p>
<table width="100%" cellpadding="0" cellspacing="1" border="1">
<td class="code-outline" BGCOLOR="#F5F5F5">
<pre class="displaycode">
/usr/local/src/modsecurity-apache_2.5.5/apache2 root# CC=gcc \
CFLAGS="-O3 -fno-omit-frame-pointer" \
LDFLAGS="-L/opt/local/lib -L/usr/lib" \
./configure --with-apxs=/usr/local/apache/bin/apxs
</pre>
</td>
</table>
<p>
Continue to compile and install with the commands:</p>
<table width="100%" cellpadding="0" cellspacing="1" border="1">
<td class="code-outline" BGCOLOR="#F5F5F5">
<pre class="displaycode">
/usr/local/src/modsecurity-apache_2.5.5/apache2 root# make
/usr/local/src/modsecurity-apache_2.5.5/apache2 root# make test
/usr/local/src/modsecurity-apache_2.5.5/apache2 root# make install
/usr/local/src/modsecurity-apache_2.5.5/apache2 root# ls -la /usr/local/apache/modules
</pre>
</td>
</table>
<p></p>
<h4><strong>6.  Configure Apache and ModSecurity.</strong></h4>
<p>We must now edit the httpd.conf file in order to load libxml2 or lua5.1 modules before the ModSecurity module.</p>
<table width="100%" cellpadding="0" cellspacing="1" border="1">
<td class="code-outline" BGCOLOR="#F5F5F5">
<pre class="displaycode">
/usr/local/src/modsecurity-apache_2.5.5/apache2 root# vi /usr/local/apache/conf/httpd.conf
</pre>
</td>
</table>
<p>
Add the lines for non Mac OS X:</p>
<table width="100%" cellpadding="0" cellspacing="1" border="1">
<td class="code-outline" BGCOLOR="#F5F5F5">
<pre class="displaycode">
#
LoadFile /usr/lib/libxml2.so
LoadFile /usr/lib/liblua5.1.so
#
LoadModule security2_module modules/mod_security2.so
</pre>
</td>
</table>
<p>
For Mac OS X, add the lines:</p>
<table width="100%" cellpadding="0" cellspacing="1" border="1">
<td class="code-outline" BGCOLOR="#F5F5F5">
<pre class="displaycode">
#
LoadFile /usr/local/lib/libxml2.2.dylib
LoadFile /usr/local/lib/liblua5.1.so
#
LoadModule security2_module modules/mod_security2.so
</pre>
</td>
</table>
<p>
Create the ModSecurity configuration file.  There is a file modsecurity.conf-minimal present in the /usr/local/src/modsecurity-apache_2.5.5 that can be used.  There is also a a Core Rule Set that was included in the /usr/local/src/modsecurity-apache_2.5.5/rules directory courtesy of Breach Security Inc.  To quote the README file, &#8220;<em>The Core Rule Set provides generic protection from unknown vulnerabilities often found in web application that are in most cases custom coded.  The Core Rule Set is heavily commented to allow it to be used as a step-by-step deployment guide for ModSecurity</em>.&#8221;  Under the rules subdirectory, there a directory &#8220;optional&#8221; which contains additional possible rules.  It is left to the reader which configuration files they may want to include, though it might be wise to start with the minimal and make sure the Apache runs without problems.  Then add configurations files as desired. </p>
<table width="100%" cellpadding="0" cellspacing="1" border="1">
<td class="code-outline" BGCOLOR="#F5F5F5">
<pre class="displaycode">
/usr/local/src/modsecurity-apache_2.5.5/apache2 root# cd ..
/usr/local/src/modsecurity-apache_2.5.5 root# cp  modsecurity.conf-minimal /usr/local/apache/conf/modsecurity.conf
/usr/local/src/modsecurity-apache_2.5.5 root# cp  rules/*.conf /usr/local/apache/conf/
</pre>
</td>
</table>
<p>
Include the modsecurity.conf, and additional ModSecurity configurations file, in the Apache httpd.conf file.</p>
<table width="100%" cellpadding="0" cellspacing="1" border="1">
<td class="code-outline" BGCOLOR="#F5F5F5">
<pre class="displaycode">
/usr/local/src/modsecurity-apache_2.5.5 root# vi /usr/local/apache/conf/httpd.conf
</pre>
</td>
</table>
<p>
Add the line:</p>
<table width="100%" cellpadding="0" cellspacing="1" border="1">
<td class="code-outline" BGCOLOR="#F5F5F5">
<pre class="displaycode">
Include /usr/local/apache/conf/modsecurity.conf
#Include /usr/local/apache/conf/modsecurity_crs_10_config.conf
#Include /usr/local/apache/conf/modsecurity_crs_21_protocol_anomalies.conf
#Include /usr/local/apache/conf/modsecurity_crs_23_request_limits.conf
#Include /usr/local/apache/conf/modsecurity_crs_30_http_policy.conf
#Include /usr/local/apache/conf/modsecurity_crs_35_bad_robots.conf
#Include /usr/local/apache/conf/modsecurity_crs_40_generic_attacks.conf
#Include /usr/local/apache/conf/modsecurity_crs_45_trojans.conf
#Include /usr/local/apache/conf/modsecurity_crs_50_outbound.conf
</pre>
</td>
</table>
<p>
Edit /usr/local/apache/conf/modsecurity.conf.  The modifications will be very dependent on your environment.  See resources listed in the Additional Information section to help with configuration.  The default configuration saves the log files relative to the configuration file directory.  Change this to where the apache logs are currently being saved. </p>
<table width="100%" cellpadding="0" cellspacing="1" border="1">
<td class="code-outline" BGCOLOR="#F5F5F5">
<pre class="displaycode">
/usr/local/src/modsecurity-apache_2.5.5 root# vi /usr/local/apache/conf/modsecurity.conf
</pre>
</td>
</table>
<p>
Change the values to:</p>
<table width="100%" cellpadding="0" cellspacing="1" border="1">
<td class="code-outline" BGCOLOR="#F5F5F5">
<pre class="displaycode">
SecAuditLog /var/www/logs/modsec_audit.log
SecDebugLog /var/www/logs/modsec_debug.log
</pre>
</td>
</table>
<p>
Let&#8217;s create null files with the correct permissions for Apache.</p>
<table width="100%" cellpadding="0" cellspacing="1" border="1">
<td class="code-outline" BGCOLOR="#F5F5F5">
<pre class="displaycode">
/usr/local/src/modsecurity-apache_2.5.5 root# touch  /var/www/logs/modsec_audit.log
/usr/local/src/modsecurity-apache_2.5.5 root# chown httpd.httpd /var/www/logs/modsec_audit.log
/usr/local/src/modsecurity-apache_2.5.5 root# touch  /var/www/logs/modsec_debug.log
/usr/local/src/modsecurity-apache_2.5.5 root# chown httpd.httpd /var/www/logs/modsec_debug.log
</pre>
</td>
</table>
<p></p>
<h4><strong>7.  Start Apache.</strong></h4>
<p>Check that the configuration file is correct and start up Apache.</p>
<table width="100%" cellpadding="0" cellspacing="1" border="1">
<td class="code-outline" BGCOLOR="#F5F5F5">
<pre class="displaycode">
/usr/local/src/modsecurity-apache_2.5.5 root# /usr/local/apache/bin/apachectl configtest
Syntax OK
/usr/local/src/modsecurity-apache_2.5.5 root# /usr/local/apache/bin/apachectl start
</pre>
</td>
</table>
<p>
Check if ModSecurity if configured into running Apache server.</p>
<table width="100%" cellpadding="0" cellspacing="1" border="1">
<td class="code-outline" BGCOLOR="#F5F5F5">
<pre class="displaycode">
/usr/local/src/modsecurity-apache_2.5.5 root# cat /var/www/logs/error_log | grep ModSecurity
[Thu Jul 31 18:24:59 2008] [notice] ModSecurity for Apache/2.5.5 (http://www.modsecurity.org/) configured.
</pre>
</td>
</table>
<p></p>
<h3>Additional Information</h3>
<p>This post is only to get the basics down.  The above information was taken from the <a href="http://www.modsecurity.org/documentation/modsecurity-apache/2.5.5/modsecurity2-apache-reference.html#installation">ModSecurity documentation</a> install section for version 2.5.5.  A great deal more information is available at the <a href="http://blog.modsecurity.org/">ModSecurity blog site</a> and in the book &#8220;<a href="http://www.apachesecurity.net">Apache Security</a>&#8220;.  </p>
<h3>Concluding Remarks</h3>
<p>Ivan Ristic and <a href="http://blog.shezaf.com/">Ofer Shezaf</a> are working on an interesting paper, &#8220;<a href="http://blog.modsecurity.org/files/enough_with_default_allow_r2_draft.pdf">Enough With Default Allow in Web Applications!</a>&#8221;  This paper demonstrates how WAFs are evolving.  To quote the paper:</p>
<blockquote><p>The default allow deployment model, which is commonly used to implement and deploy web applications, is the cause of numerous security problems. We propose a method of modeling web applications in a platform-agnostic way to adopt a default deny model instead, removing several classes of vulnerability altogether and significantly reducing the attack surface of many others. Our approach is best adopted during development, but can be nearly as efficient as an afterthought, or when used at deployment time.  What they are looking to do is create a protection layer between the web servers and applications which would increase security and turn applications into verifiable components with external contracts that can be enforced.</p></blockquote>
<p>Ristic mentions in his post the planned release of &#8220;<em>an open source profiling tool (which I will announce next week) to help with the third use case and automate the creation of positive security models (also known as the learning feature of web application firewalls)</em>.&#8221;  Breach Security has also <a href="http://www.breach.com/news-events/press-releases/whitehat-security-and-breach-security-team-to-offer-powerful-web-application-security.html">teamed up with WhiteHat Security</a> to add the ability to their Sentinel scanning service to automatically create custom ModSecurity rules for certain classes of vulnerabilities that are found in your web applications.  This is the kind of evolution that is required in security and makes ModSecurity such an interesting software package.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.securitymonks.com/2008/07/31/implementing-a-web-application-firewall-with-modsecurity/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Open Source and Service-Orientated Architecture</title>
		<link>http://blog.securitymonks.com/2007/01/28/open-source-and-service-orientated-architecture/</link>
		<comments>http://blog.securitymonks.com/2007/01/28/open-source-and-service-orientated-architecture/#comments</comments>
		<pubDate>Mon, 29 Jan 2007 05:48:36 +0000</pubDate>
		<dc:creator>John Gerber</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[SOA]]></category>
		<category><![CDATA[Web Application]]></category>

		<guid isPermaLink="false">http://blog.securitymonks.com/?p=24</guid>
		<description><![CDATA[&#8220;These blind men, every one honest in his contentions and certain of having the truth, formed schools and sects and factions&#8230;&#8221; &#8212; Buddha

&#8220;The Blind Men and the Elephant&#8221; is a classic fable.  As the world of IT becomes more complex, the people in IT become more specialized.  People become so focused in their [...]]]></description>
			<content:encoded><![CDATA[<p>&#8220;<em>These blind men, every one honest in his contentions and certain of having the truth, formed schools and sects and factions&#8230;</em>&#8221; &#8212; <b>Buddha</b>
<p>
<a href="http://www.plumdigital.com/0_general/blindman.html"><img src="/images/blindmen.jpg" align=left width=250 alt="Blind Men and the Elephant" /></a>&#8220;<em>The Blind Men and the Elephant&#8221; is a classic fable.  As the world of IT becomes more complex, the people in IT become more specialized.  People become so focused in their areas, they lose the ability to see the big picture.  Life becomes the fable.  The fable is about a group of blind men who came upon an elephant. The first man, feeling the enormous leg, said, &#8216;This thing is very much like a tree.&#8217; The second, standing near its ear, reached up and said, &#8216;This is a winnowing fan!&#8217; &#8216;No,&#8217; said a third as he grasped the moving trunk. &#8216;Be careful. This creature is a serpent.&#8217; &#8216;I disagree,&#8217; said a voice at the other end. &#8216;It is only a frayed piece of rope&#8217;. The last man commented, &#8216;You are all wrong. I have felt this thing on both sides and it is just a wall.&#8217;</em>&#8221;
</p>
<p>
Let&#8217;s talk about two parts of the elephant, open source software (OSS) and service-orientated architecture (SOA).  John Grimes, assistant secretary of Defense for networks and information integration/chief information officer, told the Network Centric Warfare conference in Washington, D.C., on Jan. 23, “As we go to SOA architecture, we keep the applications behind and share the data on the network, and it becomes very critical that data is understood by everyone.”
</p>
<p>“It just eats our lunch every time we get into a proprietary situation, because it’s noncompetitive,” Grimes stated explaining that DOD will increasingly move to SOA because it benefits information sharing and acquisitions.   Federal Computing Weekly has an article, &#8220;<a href="http://www.fcw.com/article97468-01-24-07-Web">DOD&#8217;s Grimes: Our focus is on data</a>&#8221; by Josh Rogin.  In another article in FCW, Bob Brewinn wrote an article, &#8220;<a href="http://www.fcw.com/article96586-10-25-06-Web">DISA Buying into SOA &#8216;Big Time&#8217;</a>.&#8221;  John Grimes is quoted as stating, &#8220;DOD spends too much time and money acquiring individual, highly-tailored systems.&#8221;  He continues, stating, &#8220;It&#8217;s time for the department to stop buying things and start buying services.”</p>
<p>
In an article in the Linux Insider title &#8220;<a href="http://www.linuxinsider.com/story/54546.html">Iona Tightens Open Source, SOA Bond</a>,&#8221; Dana Gardner writes:
</p>
<blockquote><p>Open source and SOA are increasingly joined at the hip. These twins are developing in tandem, not sequentially, which is giving CIOs and architects a variety of choices for picking and choosing the projects and products that make up their SOAs.</p></blockquote>
<p>Darryl K. Taft writes an article for eWeek title, &#8220;<a href="http://www.eweek.com/article2/0,1759,1932297,00.asp">Web Services, SOA, and Open Source Converge</a>.&#8221;  Hub Vandervoort, chief technology officer at Sonic Software Corp., Bedford, Mass., was on a panel of heavy hitters at the Web Services/SOA on Wall Street conference on Feb. 27.  Vandervoort makes the point that, &#8220;SOA as a concept will challenge the whole concept of one throat to choke. SOA means federation and is built from federated components that are boundless.&#8221;
</p>
<p>
Han Zaunere, president of New York PHP, an organization for the Apache, MySQL and PHP community in New York, stated, &#8220;&#8221;In the long run, as far as looking at what you get, I think open source is more valuable.&#8221;  He points out, &#8220;If I download [licensed] software and in two years it&#8217;s obsolete, I have no return on that. When you buy open-source support, the software is secondary.&#8221;  Hiram Chirino, co-founder and director of architecture at LogicBlaze Inc., of Marina del Ray, Calif., believes that open-source software allows users to scale their systems more easily and cheaply because they can simply add more servers without having to worry about licensing costs.
</p>
<p>
Bob Sutor has written, and podcasted, extensively on the topic of open source.  His four part series, is very interesting.  I would recommend folks take a few moment to read it, paying particular attention to part 4, &#8220;The SOA Connection.&#8221;  He covers:</p>
<ul>
<li><a href="http://www.sutor.com/newsite/blog-open/?p=130">Part 1: Standards</a></li>
<li><a href="http://www.sutor.com/newsite/blog-open/?p=199">Part 2: Software</a></li>
<li><a href="http://www.sutor.com/newsite/blog-open/?p=276">Part 3: Open Source Software</a></li>
<li><a href="http://www.sutor.com/newsite/blog-open/?p=677">Part 4: The SOA Connection</a></li>
</ul>
<p>Analyst at Forrester have written a report, &#8220;The Future of Enterprise Software.&#8221;  Andy McCue has written the article &#8220;<a href="http://software.silicon.com/applications/0,39024653,39160119,00.htm?r=2">Open Source and SOA to Redefine Software Landscape</a>&#8221; where he summarizes the report.  The report stated: &#8220;Too many IT pros today reject the new ideas behind the four horsemen as &#8216;not ready for prime time&#8217;. Blanket dismissals of new ideas are defensive; IT executives should be looking instead for ways that the four horsemen can drive productive changes for business. These forces will define the future of enterprise software.&#8221;  The &#8220;four horsemen&#8221; of commoditization are service oriented architecture (SOA), open source, software as a service and offshoring.  Forrester predicts the four horsemen will lead to cheaper prices and a radical change in enterprise software landscape of the future.
</p>
<p>
SOA is ultimately about integration.  It can be integration of open or closed source software packages.  SOA brings agility to an enterprise.  CEO and CIO are beginning to question the wisdom of getting locked into a software solution.  When you take a solution, such as SAP, it is a solution that matches a complex problem with a complex solution.  Annrai O&#8217;Tool, CEO of Cape Clear, tells the following story on <a href="http://briefingsdirect.blogspot.com/2007/01/transcript-of-webinar-on-soa-trends.html">Dana Gardner&#8217;s SOA trends webinar</a>:</p>
<blockquote><p>We have a couple of ex-PeopleSoft people working with us at Cape Clear, and they tell a great story about how they used to do sales pitches against SAP. They went to the customer with a small cup of quick-drying cement and poured it into a mold. By the time they finished the presentation, the cement is set and it has SAP written on it.  They then say, “There you go, that’s the deal with SAP.” It is easy to design, but once you get your business process done, it is embedded in cement.</p></blockquote>
<p>O&#8217;Tool points out that for many businesses, the business process is very difficult to change. He goes on to say, &#8220;SOA is all about how to use that application in new and more transparent ways that are easier to change and that deliver agility.&#8221;</p>
<p>
Commercial solutions can have high up cost and high continuous operation costs.  Even changing out hardware can end up costing a business significantly due to software licenses.  In this rapidly changing IT environment, a company can easily find itself with a solution that no longer fits its business need, but it has too much invested to change course.  Even worse, in time their software solution might no longer be actively developed as software companies change directions or go out of business.  OSS helps reduce some of these risks.  While there are costs, more of the expenditures goes into the companies own people.  This helps create a work force better adapted to face a changing IT environment.  Hub Vandervoort said it best when he stated &#8220;when you buy a software license you are paying for past innovation; when you buy open source, you&#8217;re investing in future innovation.&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.securitymonks.com/2007/01/28/open-source-and-service-orientated-architecture/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The Benefits of Open Source</title>
		<link>http://blog.securitymonks.com/2007/01/28/the-benefits-of-open-source/</link>
		<comments>http://blog.securitymonks.com/2007/01/28/the-benefits-of-open-source/#comments</comments>
		<pubDate>Sun, 28 Jan 2007 19:32:18 +0000</pubDate>
		<dc:creator>John Gerber</dc:creator>
				<category><![CDATA[International]]></category>
		<category><![CDATA[Links]]></category>
		<category><![CDATA[Open Source]]></category>

		<guid isPermaLink="false">http://blog.securitymonks.com/?p=23</guid>
		<description><![CDATA[&#8220;Knowledge is of two kinds. We know a subject ourselves, or we know where we can find information upon it.&#8221; &#8212; Samuel Johnson




When I was in college, some fundamental preachers came to campus to let us all know how terrible we were.  They even preached against the Mennonite women whose hemlines fell above their [...]]]></description>
			<content:encoded><![CDATA[<p>&#8220;<a href="http://www.quotedb.com/quotes/267"><em>Knowledge is of two kinds. We know a subject ourselves, or we know where we can find information upon it.</em></a>&#8221; &#8212; <strong>Samuel Johnson</strong></p>
<p>
<a href="http://www.userfriendly.org/cartoons/archives/98dec/19981203.html"><img src="/images/opensource.gif" alt="Open Source" width=500/></a>
</p>
<p>
When I was in college, some fundamental preachers came to campus to let us all know how terrible we were.  They even preached against the <a href="http://en.wikipedia.org/wiki/Mennonite">Mennonite</a> women whose hemlines fell above their ankles.  One of the campus Christian groups were so upset with themselves because they froze up when trying to argue via an exchange of Bible verses.  The statements the preachers were coming out with were so over the top, the only thing that tends to come to one&#8217;s mind is &#8220;Are they for real?&#8221;  You can&#8217;t really get past that, rendering you a stammering idiot.  In the end, it did not matter.  It was not about an exchange of ideas.
</p>
<p>
I run into some folks who will preach against open source.  A classic sound bite argument is, &#8220;Is freeware really free?&#8221;  I remember working for government when government was very anti open source.  Nowadays, attitudes have changed.  Still, I come across some die hards from the old days.  When I encounter such a person, I end up thinking about the news stories of those time capsules recently opened.  Were these people somehow trapped in one of those time capsules?  I am not an open source zealot.  You use the right tool for the right job.  I would argue one needs to be aware of the tools at their disposal.  In the rapidly changing IT world, OSS can be a valuable tool adding agility to an enterprise solution toolbox.  There are so many reports on the business impact of OSS, that one could write several books on the topic.  I will spare you that, but still I wanted to post a few links.  It is my way of countering the closed source preacher with what is equivalent to quoting open source Bible verses.
</p>
<p>
A good place to start is discussing the advantages, risk, culture change, and strategies involved with adapting OSS.  Ibrahim Haddad has written a Enterprise OpenSource Magazine article titled, <a href="http://linuxbusinessweek.sys-con.com/read/318776.htm">&#8220;Adapting an Open Source Approach to Software Development, Distribution, and Licensing</a>.&#8221;  He does a good job of discussing the unique characteristics, development model, the advantages, the risks, cultural changes, and strategies involved with developing and deploying OSS.  There is more to open source than just not paying for the software</p>
<p>For a fun 48 page presentation, head over to the Free Electrons site.  They have posted the presentation &#8220;<a href="http://free-electrons.com/articles/reasons?set_language=en">Advantages of Free Software and Open Source in Embedded Systems</a>.&#8221;  A newly released <a href="http://ec.europa.eu/enterprise/ict/policy/doc/2006-11-20-flossimpact.pdf"> European Commission study</a><a> on the impact of Free, Libre, and Open Source Software (FLOSS) on the European IT sector is summarized by Thomas Claburn of InformationWeek in the article, &#8220;</a><a href="http://www.informationweek.com/windows/showArticle.jhtml?articleID=196901596&#038;subSection=Open+Source">Study Finds Open Source Benefits Business</a>.&#8221;  The Europeans have been major developers of open source projects.  Over on the English GBdirect site they have put together an area discussing the <a href="http://open-source.gbdirect.co.uk/migration/benefit.html">benefits of using open source software</a>.</p>
<p>
How does OSS fit into American markets?  Darryl K. Taft did an article for eWeek on &#8220;<a href="http://www.eweek.com/article2/0,1895,1926444,00.asp">CIOs: Open-Source Software Offers Cost, Quality Benefits</a>.&#8221;  Major American companies are also posting information on the benefits of open source.  Red Hat, Inc. has posted, &#8220;<a href="http://www.bitpipe.com/detail/RES/1162559048_178.html?psrc=FRP">Understanding the Financial Benefits of Open Source</a>.&#8221;  Sun has posted, &#8220;<a href="http://www.sun.com/software/opensource/benefits.jsp">Open Source Is About Participation</a>.&#8221;  Of course, the US government has been looking into using OSS.  Joab Jackson writing for GCN did a report, &#8220;<a href="http://www.gcn.com/online/vol1_no1/41415-1.html">Report Advocates Open-Source Approach for Software Acquisition</a>.&#8221;  It discusses the Office of the Deputy Undersecretary of Defense for Advanced Systems and Concepts commissioning the <a href="http://www.acq.osd.mil/actd/articles/OTDRoadmapFinal.pdf">Open Technology Development road map</a>.  That is a fascinating report, which I highly recommend everyone interested in this topic read.  A summary of the report can be found in Computer Business article title, &#8220;<a href="http://www.businessreviewonline.com/os/archives/2006/07/open_source_in.html">Open Source in the National Interest</a>.&#8221;
</p>
<p>
Additional information on how OSS is being used within DoD can be read in the GCN article, &#8220;<a href="http://www.gcn.com/print/22_15/22425-1.html">Open-Source Software Gets Nod from DoD</a>&#8221; by Patricia Daukantas.  Joris Evers writes for CNET how &#8220;<a href="http://news.zdnet.com/2100-1009_22-6025579.html">Homeland Security Helps Secure Open-Source Code</a>.&#8221;
</p>
<p>
Those articles and reports are just a sampling.  They should help folks see the benefits of OSS and danger when implemented in the wrong environments.  There are other benefits in terms of the agility open source brings to an organization.  Plus, there are ties in to other areas of IT that are gaining major attention in 2007.  I&#8217;ll write more on those later.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.securitymonks.com/2007/01/28/the-benefits-of-open-source/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Identity Management</title>
		<link>http://blog.securitymonks.com/2006/12/18/identity-management/</link>
		<comments>http://blog.securitymonks.com/2006/12/18/identity-management/#comments</comments>
		<pubDate>Mon, 18 Dec 2006 06:51:24 +0000</pubDate>
		<dc:creator>John Gerber</dc:creator>
				<category><![CDATA[Higgins]]></category>
		<category><![CDATA[IdM]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[OpenID]]></category>
		<category><![CDATA[Opinion]]></category>
		<category><![CDATA[To Do]]></category>

		<guid isPermaLink="false">http://blog.securitymonks.com/?p=12</guid>
		<description><![CDATA[
As we increase our use of services being developed as part of Web 2.0, we find more services linked together and more integrated applications.  A year ago, Dick Hardt, CEO of Sxip Identity sat down with IT conversations to talk about &#8220;Identity 2.0: Identity Protocols, Today and Tomorrow.&#8221;   ZDNet posted an article [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://picayune.uclick.com/comics/crwiz/2005/crwiz050831.gif"><img width="479" height="149" align="top" alt="Identity Management" title="Identity Management" src="/images/thwizardofid.gif" /></a></p>
<p>As we increase our use of services being developed as part of Web 2.0, we find more services linked together and more integrated applications.  A year ago, Dick Hardt, CEO of Sxip Identity sat down with IT conversations to talk about &#8220;<a href="http://www.itconversations.com/shows/detail857.html">Identity 2.0: Identity Protocols, Today and Tomorrow</a>.&#8221;   ZDNet posted an article back in May, &#8220;<a href="http://blogs.zdnet.com/digitalID/?p=22">The Many Players at IIW</a>.&#8221;  IIW is the <a href="http://www.windley.com/archives/2006/05/iiw2006_tuesday_1.sht">Internet Identity Workshop</a>.  Of course, I have to point out Phil Windley&#8217;s blog <a href="http://www.windley.com/">Technometria</a>.  Phil is the author of the O&#8217;Reilly book, &#8220;<a href="http://www.amazon.com/exec/obidos/ASIN/0596008783/windleyofente-20">Digital Identity</a>,&#8221; a man who knows what he is talking about.</p>
<p>Dick Hardt stated, &#8220;The identity management industry needs a common approach to secure, role-based access and compliance reporting for the enterprise and open source projects like Bandit from Novell and Higgins are a great step in that direction. We see this as a natural compliment to the user-centric Identity 2.0 efforts being made with SXIP and DIX and are excited to work with them on adding support of <a href="http://www.bandit-project.org/index.php/Welcome_to_Bandit">Bandit</a>, <a href="http://www.eclipse.org/higgins/">Higgins</a> and eDirectoryTM.&#8221;</p>
<p>Now talking with a friend of mine, Vincent Tillman, he pointed out that the problem is that at some level projects must interoperate in a large enterprise.  The Security Assertion Markup Language (<a href="http://en.wikipedia.org/wiki/SAML">SAML</a>) (for real-time management) and Liberty (federation/trust between systems) seem to always be mentioned in the &#8220;going-to-be&#8221; supported category.  Another, the Service Provisioning Markup Language (<a href="http://www.openspml.org/">SPML)</a>, allows resources (e.g. , Oracle Db) and managers (e.g., Tivoli or Sun IdM) to create and manage accounts by calling standard (web) services.  SPML and SAML both are Web Services initiatives for standard account and access management.  I&#8217;ll just mention that the <a href="http://www.oasis-open.org">OASIS</a> general membership voted to accept <a href="http://www.oasis-open.org/committees/download.php/17708/pstc-spml-2.0-os.zip">SPML v2.0</a> as an OASIS Standard.  <a href="http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=security#samlv20">SAML v2.0</a> was accepted by OASIS back in March 2005.</p>
<p>I am going to quote from IT Conversations, &#8220;Hardt differentiates Identity 1.0 from Identity 2.0 by describing the move from a directory centric environment where authentication means simply that your identity is registered on a web site&#8217;s directory to a user centric environment where an identity can truly be applied to a variety of web sites. He believes this will happen because the recent history of technological initiatives shows that open and simple wins out.&#8221;</p>
<p>To add this idea, I&#8217;ll quote <a title="Identity 2.0" href="http://redmonk.com/cote/2006/04/20/identity-20-trustless-redirects-openid-lid-and-friendsor-learning-to-spell-centralized/">redmonk</a>, &#8221; Identity 2.0 systems are interested in using the concept of a user’s identity as a declarative bundle of claims about the user: from things like their name, address, to less traditional things like their desires, customer service history, and other attributes that are usually not so much associated with a user identity. That’s the first big leap of Identity 2.0 think: a user’s attributes should be associated with that user’s identity..&#8221;</p>
<p>For an example of Identity 2.0, and keeping it in the open source area, take a look at <a title="OpenID" href="http://openid.net/">OpenID</a>.  To quote the site, &#8220;OpenID starts with the concept that anyone can identify themselves on the Internet the same way websites do-with a <a href="http://en.wikipedia.org/wiki/Uniform_Resource_Identifier">URI</a> (also called a URL or web address). Since URIs are at the very core of Web architecture, they provide a solid foundation for user-centric identity.&#8221;  It is a decentralized <a title="Digital identity" href="http://en.wikipedia.org/wiki/Digital_identity">digital identity</a> system, in which any user&#8217;s <a title="Online identity" href="http://en.wikipedia.org/wiki/Online_identity">online identity</a> is given by <a title="URL" href="http://en.wikipedia.org/wiki/URL">URL</a> (such as for a <a title="Blog" href="http://en.wikipedia.org/wiki/Blog">blog</a> or a home page) or an <a title="XRI" href="http://en.wikipedia.org/wiki/XRI">XRI</a> in the latest version, and can be verified by any server running the protocol.  <a title="Wkipedia OpenID Entry" href="http://en.wikipedia.org/wiki/OpenID" /></p>
<p><a title="Wkipedia OpenID Entry" href="http://en.wikipedia.org/wiki/OpenID">Wikipedia</a> adds, &#8220;On OpenID-enabled sites, <a title="Internet" href="http://en.wikipedia.org/wiki/Internet">Internet</a> users don&#8217;t need to create and manage a new account for every site before being granted access. Instead, they only need to be able to authenticate with a trusted site that supports OpenID, called the identity provider (or <strong>IdP</strong>, sometimes called an <a title="I-broker" href="http://en.wikipedia.org/wiki/I-broker">i-broker</a>). The identity provider can then confirm ownership of the user&#8217;s OpenID identifier to other OpenID-enabled sites, called relying parties or <strong>RPs</strong>. Unlike most <a title="Single sign-on" href="http://en.wikipedia.org/wiki/Single_sign-on">single sign-on</a> architectures, OpenID does not specify the <a title="Authentication" href="http://en.wikipedia.org/wiki/Authentication">authentication</a> mechanism. Therefore, the strength of an OpenID login depends on how much a relying party knows about the authentication policies of the identity provider. Without such knowledge, OpenID is not meant to be used on sensitive accounts (<a title="Banking" href="http://en.wikipedia.org/wiki/Banking">banking</a>, <a title="E-commerce" href="http://en.wikipedia.org/wiki/E-commerce">e-commerce</a> transactions, etc.), but if an identity provider uses <a title="Strong authentication" href="http://en.wikipedia.org/wiki/Strong_authentication">strong authentication</a>, OpenID can be used for all types of transactions..&#8221;</p>
<p>Sounds like an interesting idea.  The need to maintain duplicate user data within an organization is a problem.  It gets worse as services are moved outside an organization.  This is the advantage of a distributed authentication system like OpenID.  On the backend, you can authenticate from any data source, including but not limited to LDAP.  Even the inclusion of a user information from legacy systems is possible.  When Access Control Lists become a reality, it will be possible to eliminate any user data from ever being stored on any site other than the central source accessed by the OpenID server.</p>
<p>After the <a href="http://www.ldap.com/1/commentary/wahl/www.digitalidworld.com">Digital ID World</a> conference <a href="http://www.networkworld.com/Home/jfontana.html">John Fontana</a>, Senior Editor, Infrastructure for Network World magazine, wrote in his article  <em><a href="http://www.networkworld.com/news/2006/091406-higgins.html">Higgins lays out roadmap for open source identity project</a></em> that</p>
<blockquote><p>The Higgins group plans to release a middleware piece called the Identity Attribute Service that acts as a layer on top of identity repositories such as directories or applications. It can aggregate data from multiple sources in real-time and bundle them into a single identity credential. The idea is to link to data without having to move it around the network.</p></blockquote>
<p><a href="http://www.ldap.com/1/commentary/wahl/20060915_01.shtml"> Mark Wahl</a> writes, &#8220;There are several ways of looking at these APIs. One is that they are conceptually similar to APIs such as <a href="http://www.microsoft.com/windows2000/techinfo/howitworks/activedirectory/adsilinks.asp">Active Directory Service Interfaces (ADSI)</a> or <a href="http://java.sun.com/products/jndi/">Java Naming and Directory Interface (JNDI)</a>, in that they provide an abstraction to enable an application to be independent of the API of a lower layer access protocol. In this view, Higgins would offer a higher level abstraction as well as a different set of supported protocols: <a href="http://www.openid.net/">OpenID</a>, <a href="http://www-128.ibm.com/developerworks/library/specification/ws-trust/">WS-Trust</a> and LDAP instead of Novell Netware, NIS and LDAP.&#8221;</p>
<p>I have written more than intended on this topic.  A very interesting area, which I will revisit later.  For now, I just wanted to point out a few concepts and links.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.securitymonks.com/2006/12/18/identity-management/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Business Intelligence</title>
		<link>http://blog.securitymonks.com/2006/12/14/business-intelligence/</link>
		<comments>http://blog.securitymonks.com/2006/12/14/business-intelligence/#comments</comments>
		<pubDate>Thu, 14 Dec 2006 20:36:34 +0000</pubDate>
		<dc:creator>John Gerber</dc:creator>
				<category><![CDATA[BI]]></category>
		<category><![CDATA[Links]]></category>
		<category><![CDATA[Open Source]]></category>

		<guid isPermaLink="false">http://blog.securitymonks.com/?p=11</guid>
		<description><![CDATA[I&#8217;ll update this post later.  I just want to get a few ideas down.  I was looking for something, which I don&#8217;t even recall what it was now, when I came across Oreon for Nagios.  Oreon is a front end providing Nagios with a dashboard.  This led me to the idea [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ll update this post later.  I just want to get a few ideas down.  I was looking for something, which I don&#8217;t even recall what it was now, when I came across <a title="Oreon Project for Nagios" href="http://www.oreon-project.org/">Oreon</a> for Nagios.  Oreon is a front end providing Nagios with a dashboard.  This led me to the idea of open source dashboards, which led me to open source business intelligence systems.  I came across <a title="Pentaho Site" href="http://www.pentaho.com/index.php">Pentaho</a>.  While reading about the components of Pentaho, I came across <a title="ACEGI" href="http://www.acegisecurity.org/">ACEGI</a> and the <a title="Eclipse Site" href="http://www.eclipse.org/">Eclipse</a> framework.  Eclipse has its own Business Intelligence and Reporting Tools (<a title="Eclipse BIRT" href="http://www.eclipse.org/birt">BIRT</a>).  If you look at BIRT, you will come across <a title="Eclipse Callisto" href="http://www.eclipse.org/callisto/">Callisto</a>.  Having tossed all those names (and links), let me provide a additional links with descriptions.</p>
<p>Why is this of interest to me?  I like to think of myself as an open source integrator.  That might just be because the places I work tend to try and cut costs in terms of software.  Many organizations are preferring to put money into support, and cut software costs.  Many of the open source companies following this business need have a model that I can understand and appreciate.  Another interest of mine is the bridging of business and IT focus.  My initial interest was in terms of security and auditing.  Reliance on IT in business is growing.  As IT takes more of the companies budget, the business is going to need to understand what return on investment they are getting.  Enter my interest in business intelligence.  Like I said, I am an integrator, whether that be in open source packages, or the integration of IT and business needs.<br />
First, a post from me would not be complete without links to podcasts.  From IT Conversations, <a title="Steve Lucas on Business Intelligence" href="http://osc.gigavox.com/shows/detail1625.html">Steve Lucas</a>, VP for Business Objects, talks on Business Intelligence.</p>
<p>The power of building on open source is that it gives the organization agility.  No longer does the vendor control innovation.  Software components can be brought together, and replaced if they fail to keep up with the changing market.  Let me take an example from an <a title="Open Sourcing Collaboration" href="http://weblog.infoworld.com/openresource/archives/2006/09/open_sourcing_c.htm">InfoWorld</a> article.  You can get Alfresco <a href="http://www.voicerd.com/VoiceRD_integration_modules_alfresco.php">integrated with</a> <a title="Asterick PBX" href="http://www.asterisk.org/">Asterisk</a> (<a href="http://forge.voicerd.org/">VoiceRD</a> from Novacoast) and <a href="http://sourceforge.net/projects/sugarcrm">SugarCRM</a> (CRM) today.  Then you can extend this. Add some <a href="http://jasperforge.org/sf/projects/jasperreports">JasperSoft</a> or <a href="http://www.pentaho.com/">Pentaho</a> for Business Intelligence (perhaps reporting capabilities). Some <a href="http://www.dimdim.com/">DimDim</a> for web conferencing. Some <a href="http://www.zimbra.com/">Zimbra</a> or <a href="http://www.scalix.org/">Scalix </a>for email/collaboration. Want to scale this out on a grid, then there is <a href="http://www.3tera.com/sol-oss.html">3Tera</a>.  The Open Source Group has  <a href="http://www.opengroup.org/tech/open-source/opengroup-os-strategy.htm">An Open Source Strategy for the Open Group</a>, where they outline, much better then I ever could, why an organization might want to utilize open source software. <span class="artText" /></p>
<p>Not satisfied?  Well here are a OSBI links for more information:</p>
<h3 class="module_title">OSBI Links</h3>
<dl>
<dt>   <a target="_new" href="http://press.teleinteractive.net/open/wiki/Main_Page">Open Source Solutions BI Wiki</a> </dt>
<dd>The Open Source Solutions BI wiki will provide research, articles and draft chapters of our book, Open Source Business Intelligence, as they are developed. There are public and private sections of the wiki. For access to the private sections please <a target="_new" href="http://teleinteractive.net/CMS/component/option,com_contact/Itemid,3/">contact us</a>.</dd>
<dt>   <a target="_new" href="http://press.teleinteractive.net/oss">Open Source Solutions Blog</a> </dt>
<dd>This blog provides timely information about open source solutions for business intelligence, collaboration, project managment &#038; data analytics, and expose the process of three authors writing a book collaboratively. Posts range from news &#038; status of OSBI projects, interviews with OSBI project teams and communities&#8217; members, and describing OSS related events.</dd>
<dt>   <a target="_new" href="http://www.osbc.com/">Open Source Business Conference</a> </dt>
<dd>The Open Source Business Conference was held at San Francisco&#8217;s Moscone Center on February 14-15. OSBC East is to be held 2006 October 17-18 in Boston, MA.</dd>
<dt>   <a target="_new" href="http://www.socialtext.net/osbc/index.cgi?osbc">OSBC Wiki</a> </dt>
<dd>The Open Source Business Conference has a Wiki on SocialText that supplements the information on the website.</dd>
<dt>   <a href="http://www.squidoo.com/performancemanagement/">Business Intelligence for Business People</a> </dt>
<dd>This lens by Tom Hudock is a good source of non-technical information about &#8220;Business Intelligence (BI), Performance Management, and Data Warehousing (DW)&#8221; </dd>
</dl>
<h3 class="module_title">Links to OSS BI Suites</h3>
<dl> </dl>
<dl> </dl>
<dl>
<dt>   <a target="_new" href="http://bee.insightstrategy.cz/en/index.html">BEE Project</a> </dt>
<dd>BEE is one of the first open source BI Suites, having been around since 2002. It provides ETL, ROLAP, reporting, integration with the R Project, is written in PERL, and primarily supports MySQL.</dd>
<dt>   <a target="_new" href="http://www.bizgres.org/">Bizgres</a> </dt>
<dd>Bizgres is a distribution of PostgreSQL with specific modifications to increase performance and use as a data warehouse. In addition, the Bizgres project comes with the KETL ETL tool and JasperReports. The Bizgres project is supported by a consurtium of three companies, Greenplum, Kinetic Networks, and JasperSoft.</dd>
<dt>   <a target="_new" href="http://www.marvelit.com/dash.html">DASH Portal</a> </dt>
<dd>MarvelIT&#8217;s Dash Portal solution is based on the Apache Jetspeed portal and their unique charting portlets. Using MARVELit DASH, dashboards can be built very easily using the power of SQL and XML.</dd>
<dt>   <a target="_new" href="http://openi.sourceforge.net/">Open<em>i</em></a> </dt>
<dd>Open<em>i</em> provides a web-driven interface to OLAP, relational, statistical and data mining sources giving BI integrators user interface, report definition and connector tools.</dd>
<dt>   <a target="_new" href="http://www.pentaho.org/index.php">Pentaho</a> </dt>
<dd>Pentaho has been getting a lot of attention since its launch and funding in 2005. This project has an impressive pedigree in its team leaders, and provides quite an array of capabilities: Reporting, Analysis, Dashboards, Data Mining and Workflow.</dd>
<dt>   <a target="_new" href="http://spagobi.objectweb.org/">SpagoBI</a> </dt>
<dd>SpagoBI is a BI platform drawing its components from the ObjectWeb consurtium. Tools include metadata management, ETL, Reporting, Analysis, and Dashboards.</dd>
</dl>
<dl> </dl>
<h3 class="module_title">Links to OSS BI Development Tools</h3>
<dl>
<dt>   <a target="_new" href="http://www.eclipse.org/birt/">Eclipse BIRT</a> </dt>
<dd>Eclipse is the IDE for Java and J2EE, and BIRT is, basically, its reporting plug-in.</dd>
<dt>   <a target="_new" href="http://efeu.cybertec.at/">EFEU</a> </dt>
<dd>EFEU is a programming environment to develop C-programs and libraries. It is often pointed to as facilitating the development of ETL and reporting software.</dd>
<dt>   <a target="_new" href="http://freshmeat.net/projects/jpgraph/">JpGraph</a> </dt>
<dd>JpGraph is an OO Graph drawing library for PHP that is very useful for data visualization and presentation.</dd>
<dt>   <a target="_new" href="http://www.informit.com/articles/article.asp?p=24684&#038;seqNum=6&#038;rl=1">PostgreSQL MDDB</a> </dt>
<dd>The linked article describes using EFEU with PostgreSQL to create a multi-dimensional database for use in OLAP.</dd>
</dl>
<dl>If you these are not enough links, go to the Squidoo site where folks pass on recommendations and posted some of the above information.</dl>
<dl> </dl>
]]></content:encoded>
			<wfw:commentRss>http://blog.securitymonks.com/2006/12/14/business-intelligence/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Socialtext Information</title>
		<link>http://blog.securitymonks.com/2006/12/13/socialtext-information/</link>
		<comments>http://blog.securitymonks.com/2006/12/13/socialtext-information/#comments</comments>
		<pubDate>Wed, 13 Dec 2006 16:32:15 +0000</pubDate>
		<dc:creator>John Gerber</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Opinion]]></category>
		<category><![CDATA[Podcast]]></category>
		<category><![CDATA[Socialtext]]></category>
		<category><![CDATA[WikiCalc]]></category>

		<guid isPermaLink="false">http://blog.securitymonks.com/?p=10</guid>
		<description><![CDATA[If you are interested in comparing Wikis, a good place to start is at the WikiMatrix.  In my opinion, Socialtext is the company to watch.  Not so much because it would be easy to implement under Mac OS X.  In fact, their FAQ  states MySQL support is still being developed.  [...]]]></description>
			<content:encoded><![CDATA[<p>If you are interested in comparing Wikis, a good place to start is at the <a title="WikiMatrix" href="http://www.wikimatrix.org/">WikiMatrix</a>.  In my opinion, Socialtext is the company to watch.  Not so much because it would be easy to implement under Mac OS X.  In fact, their <a title="FAQ MySQL Support" href="http://www.socialtext.net/stoss/index.cgi?socialtext_open_faq#why_isn_t_mysql_supported">FAQ </a> states MySQL support is still being developed.  While, I might agree with the folks at InfoSpaces when they posted their blog, <a title="SocialText 2.0: not yet there" href="http://www.infospaces.it/wordpress/topics/information-architecture/112">Socialtext 2.0: not yet there</a>, the fast pace development of the software gives me faith that they will get there.  What interests me the most is the work Socialtext developers have been doing with the <a title="Socialtext APIs" href="http://www.socialtext.net/stoss/index.cgi?socialtext_apis">API</a> interfaces  and the involvement in the open source community.  Check into the CEO, Ross Mayfield <a title="Ross Mayfield" href="http://ross.typepad.com/">Weblog</a>  or company&#8217;s <a title="Socialtext Blog" href="http://www.socialtext.com/blog">blog</a> for recent developments.  There is even an area maintained for customers to exchange information, call <a title="Customer Exchange" href="http://www.socialtext.net/exchange/index.cgi">Customer Exchange</a>.</p>
<p>At the O&#8217;Reilly Open Source Convention (OSCON), Socialtext released <a title="Socialtext Open" href="http://www.socialtext.net/stoss/index.cgi">Socialtext Open</a>.  Socailtext distribution includes <a title="wikiCalc" href="http://www.socialtext.net/stoss/index.cgi?socialcalc_wikicalc">wikiCalc</a>, which is the social  spreadsheet, and <a title="Wikiwyg" href="http://www.socialtext.net/stoss/index.cgi?wikiwyg">Wikiwfg</a>, and WYSIWYG editor.  Very interesting products.</p>
<p>If you want to read more, TechCrunch has a posting by Marshall Kirkpatrick, &#8220;<a title="SocialText aims for wiki 2.0" href="http://www.techcrunch.com/2006/09/21/socialtext-goes-20/">SocialText aims for wiki 2.0</a>.&#8221;   And of course, there are podcasts.  Kirsten Jones talked to Perlcast about the REST API beta.  The <a title="Kristen Jones talks about REST API" href="http://www.perlcast.com/audio/Perlcast_Interview_035.mp3">podcast</a> is available along with <a href="http://www.socialtext.net/stoss/index.cgi?invitation_to_socialtext_rest_api_beta">reading material</a>.   Last month, CEO Ross Mayfield joined Phil Windley, Matt Asay, and Scott C. Lemon in a <a href="http://www.itconversations.com/shows/detail1649.html">r</a><a href="http://www.itconversations.com/shows/detail1649.html">eview of the technology news</a> of the week.   Before Wikimania 2006, InfoWorld&#8217;s Jon Udell had a <a title="Wikis in the enterprise" href="http://weblog.infoworld.com/udell/gems/ju_mayfield.mp3">podcast</a> with Ross Mayfeild about Socialtext&#8217;s decision to release Socialtext Open and its relationship with WikiCalc.  PodTech has Ross Mayfield talking with Andrew McAfee about <a title="Web 2.0 for Enterprise" href="http://media.podtech.net/media/2006/09/PID_001036/Podtech_Interop_Mayfield_McAfee_Interop2006_NYC_Keynote_CA_Ross_Mayfield_2006-09-28_Michael_Johnson_home.mp3">Web 2.0 for Enterprise</a>.  Jennifer Jones talked with Ross about wikis and their use for companies both large and small in the podcast &#8220;<a title="Delving Into the Real Value of Wikis" href="http://media.podtech.net/media/2006/05/PID_000464/Podtech_Marketing_050106_marketing_voices_Ross_Mayfield_PodTech_2006-05-15___home.mp3">Delving Into the Real Value of Wikis</a>.&#8221;   There is a video cast at the start of this month entitled, &#8220;<a title="Inside the First Wiki Company" href="http://www.podtech.net/home/technology/1604/inside-the-first-wiki-company-socialtext">Inside the first Wiki Company, SocialText</a>.&#8221;  PodTech has additional <a title="PodTech" href="http://www.podtech.net/home/?s=socialtext&#038;x=0&#038;y=0">podcast/video</a> cast available at their site.</p>
<p>It is an  interesting company and leader in the Wiki world.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.securitymonks.com/2006/12/13/socialtext-information/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://weblog.infoworld.com/udell/gems/ju_mayfield.mp3" length="14591625" type="audio/mpeg" />
<enclosure url="http://www.perlcast.com/audio/Perlcast_Interview_035.mp3" length="11043473" type="audio/mpeg" />
<enclosure url="http://media.podtech.net/media/2006/05/PID_000464/Podtech_Marketing_050106_marketing_voices_Ross_Mayfield_PodTech_2006-05-15___home.mp3" length="17278701" type="audio/mpeg" />
<enclosure url="http://media.podtech.net/media/2006/09/PID_001036/Podtech_Interop_Mayfield_McAfee_Interop2006_NYC_Keynote_CA_Ross_Mayfield_2006-09-28_Michael_Johnson_home.mp3" length="34578700" type="audio/mpeg" />
		</item>
		<item>
		<title>SOA and Open Source</title>
		<link>http://blog.securitymonks.com/2006/12/05/soa-and-open-source/</link>
		<comments>http://blog.securitymonks.com/2006/12/05/soa-and-open-source/#comments</comments>
		<pubDate>Tue, 05 Dec 2006 14:30:18 +0000</pubDate>
		<dc:creator>John Gerber</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Opinion]]></category>
		<category><![CDATA[Podcast]]></category>
		<category><![CDATA[SOA]]></category>

		<guid isPermaLink="false">http://blog.securitymonks.com/?p=7</guid>
		<description><![CDATA[A recently posted podcast on SOA and Open Source was done by Dana Gardner over on ZDnet.  Note, this was sponsored by IONA Technologies:
IONA broadens open source approach to SOA with Celtrix Enterprise initiative
Let me quote the accompanying blog:
IONA Technologies on Monday introduced a broader Apache-based set of open source SOA initiatives with the [...]]]></description>
			<content:encoded><![CDATA[<p>A recently posted podcast on SOA and Open Source was done by Dana Gardner over on ZDnet.  Note, this was sponsored by IONA Technologies:</p>
<p><a title="IONA broadens open source approach to SOA" href="http://blogs.zdnet.com/Gardner/?p=2385">IONA broadens open source approach to SOA with Celtrix Enterprise initiative</a></p>
<p>Let me quote the accompanying blog:</p>
<blockquote><p><a href="http://www.iona.com/">IONA Technologies</a> on Monday introduced a <a href="http://www.cbronline.com/article_news.asp?guid=FA0F6A73-96B5-4B86-918A-0F068180D8F1">broader Apache-based set of open source SOA initiatives</a> with the introduction of <a href="http://www.iona.com/pressroom/2006/20061204a.htm?WT.mc_id=1234678">Celtix Enterprise</a>, which expands the <a href="http://en.wikipedia.org/wiki/Enterprise_service_bus">ESB</a> offering to include other open source technologies including <a href="http://incubator.apache.org/projects/qpid.html">Qpid</a>, which implements the <a href="http://www.iona.com/opensource/amqp/">Advance Message Queuing Protocol (AMQP)</a> specification, and <a href="http://www.activemq.org/">ActiveMQ</a>, the <a href="http://en.wikipedia.org/wiki/Java_Message_Service">JMS</a> 1.1-based messaging middleware that uses AMQP. Celtix Enterprise also includes Eclipse-based tooling supporting <a href="http://en.wikipedia.org/wiki/JBI">JBI</a>, Tomcat, and Spring.</p></blockquote>
<p>I like the idea.  Open Source has become more and more popular as the business model on software has shifted.  People now tap into the open source community to help develop their software and move towards offering services to help support the software.  This is different than the traditional method of in house development with the hope to make money off the sales of software.  Though, alot of company that developed software really made their money providing services and support, even when they were selling the software.  It is an interesting model.</p>
<p>Introduce a new architecture based on services and it just seems that we are moving in the same circles.  SOA is about the architecture.  There is alot of cost involved and managers are looking to defray the cost wherever they can.  Add to this an architecture which is all about not getting locked into a particular proprietary solution, but being able to communicate between different services.  It is all about being agile.  Changes are occurring so rapidly, you have to be able to adapt quickly.  Investing in your people help create an organization that can adapt to whatever comes tomorrow.  If a company only invests in proprietary solutions, the company one day will find itself to be similar to the Titanic; unable to change course quick enough to avoid the unforeseen perils that surely will come its way.</p>
<p><a href="http://www.briefingsdirect.com/">Listen to the podcast</a>.</p>
<p>Of course, when it comes to SOA, we have to see what Dave Linthicum has to say about OSS SOAs:</p>
<p><a title="Open Source Enterprise Service Bus (ESBs) Have Emerged" href="http://weblog.infoworld.com/realworldsoa/archives/2006/11/open_source_esb.html">Open Source ESBs Have Emerged</a></p>
<p>Truthfully, I don&#8217;t much about SOA, though I keep listening and reading.  I do know to listen what Dave has to say, even if he doesn&#8217;t understand open source.  So, keep an eye on Mule.  The bottom line is that currently developers who are building SOAs are not hardcore geeks.  Sorry, Dave.  The less technical guys require modeling tools with features to work collaboratively in conjunction with non-technical people.  Commercial companies deliver this.  While there are open source solutions, there simply are not many people who can implement them.  Companies, while wanting to reduce the cost of the SOA software, lack the personnel.  This seems like prime ground for consulting companies.  Traditional close source companies are going open source, sort of, and offering consulting and support towards this end.  The open solutions are out there and are being developed ever day.  It is an interesting area to keep an eye on.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.securitymonks.com/2006/12/05/soa-and-open-source/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

