<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
  <channel>
    <title><![CDATA[[SecurityRatty] tag: robustness]]></title>
    <link>http://securityratty.com/tag/robustness</link>
    <description></description>
    <pubDate>Thu, 20 Sep 2007 14:52:00 +0000</pubDate>
    <generator>iRatty Engine</generator>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <item>
      <title><![CDATA[There's just no helping some people]]></title>
      <link>http://securityratty.com/article/8a5f6ba85c2bee097009255501621889</link>
      <guid>http://securityratty.com/article/8a5f6ba85c2bee097009255501621889</guid>
      <description><![CDATA[Even though we're a technology vendor, we always stress that, when considering the robustness of your information security strategy, technology isn't always the answer. It's upon the effective...]]></description>
      <content:encoded><![CDATA[Even though we're a technology vendor, we always stress that, when considering the robustness of your information security strategy, technology isn't always the answer. It's upon the effective combination of people, process and technology that we must ultimately rely. That's why it pained me when <a href="http://www.mailonsunday.co.uk/news/article-1082375/The-zzzzivil-servant-fell-asleep-train-laptop-secrets-view.html">this story appeared in the UK press last weekend</a>...]]></content:encoded>
      <pubDate>Wed, 05 Nov 2008 21:00:00 +0000</pubDate>
      <category domain="http://securityratty.com/tag/technology vendor">technology vendor</category>
      <category domain="http://securityratty.com/tag/technology">technology</category>
      <category domain="http://securityratty.com/tag/information security strategy">information security strategy</category>
      <category domain="http://securityratty.com/tag/people">people</category>
      <category domain="http://securityratty.com/tag/effective combination">effective combination</category>
      <category domain="http://securityratty.com/tag/ultimately rely">ultimately rely</category>
      <category domain="http://securityratty.com/tag/stress">stress</category>
      <category domain="http://securityratty.com/tag/weekend">weekend</category>
      <category domain="http://securityratty.com/tag/story">story</category>
      <source url="http://www.rsa.com/blog/blog_entry.aspx?id=1381">There's just no helping some people</source>
    </item>
    <item>
      <title><![CDATA[Eleventh Hour Rescue for Phila. Network?]]></title>
      <link>http://securityratty.com/article/bba402702f7a3dd80c32dedddaedd334</link>
      <guid>http://securityratty.com/article/bba402702f7a3dd80c32dedddaedd334</guid>
      <description><![CDATA[Local investors poised to assume control of Philadelphia Wi-Fi network: The Philadelphia Inquirer says two local businessmen will form a new company to create a for-profit service that will have a...]]></description>
      <content:encoded><![CDATA[<p><img src="http://wifinetnews.com/images/muni_icon.jpg" align="right" hspace="5" height="80" width="80" border="0" /><strong><a href="http://www.philly.com/inquirer/politics/philadelphia/20080617_Local_investors_to_rescue_Philly_wi-fi.html">Local investors poised to assume control of Philadelphia Wi-Fi network:</a></strong> The Philadelphia Inquirer says two local businessmen will form a new company to create a for-profit service that will have a combination of fees and advertising support. One of the two was briefly the head of the non-profit Wireless Philadelphia that technically is responsible for the network; the other, a former Verizon executive. Their announcement is expected later today.</p>

<p>Can they succeed where EarthLink (and others) failed? Possibly. If they get the same deal that EarthLink previously offered, they're getting a lot of equipment for free and a quantifiable set of problems. I had written earlier it wasn't a good deal for Phila. to accept the network, but a private operator that's locally based and is trying to do good and get a return on its investment may be able to raise money and set more modest goals. Starting from scratch is a non-starter for any firm at this point.</p>

<p>What they desperately need to do if they acquire the network is immediately bulk out several critical square miles, convince the city to buy some service right away (point-to-point dedicated connections to replace wirelines comes to mind, but will an ex-Verizoner be able to convert municipal revenue that's going to his old employer without qualms?), and show that the network can work.</p>

<p>The advertising part is interesting. MetroFi has shown that their particular flavor of ad-supported Wi-Fi doesn't work. But their goal wasn't crossing a digital divide, and the Portland, Ore., network was never given high marks by local users as to its robustness and reach. </p>]]></content:encoded>
      <pubDate>Tue, 17 Jun 2008 01:39:29 +0000</pubDate>
      <category domain="http://securityratty.com/tag/network">network</category>
      <category domain="http://securityratty.com/tag/wi-fi">wi-fi</category>
      <category domain="http://securityratty.com/tag/philadelphia wi-fi network">philadelphia wi-fi network</category>
      <category domain="http://securityratty.com/tag/local">local</category>
      <category domain="http://securityratty.com/tag/local users">local users</category>
      <category domain="http://securityratty.com/tag/quantifiable set">quantifiable set</category>
      <category domain="http://securityratty.com/tag/convert municipal revenue">convert municipal revenue</category>
      <category domain="http://securityratty.com/tag/earthlink previously">earthlink previously</category>
      <category domain="http://securityratty.com/tag/for-profit service">for-profit service</category>
      <source url="http://wifinetnews.com/archives/008363.html">Eleventh Hour Rescue for Phila. Network?</source>
    </item>
    <item>
      <title><![CDATA[More trustworthy election systems via SDL?]]></title>
      <link>http://securityratty.com/article/866587460674cd492103d30bf6cdbe4f</link>
      <guid>http://securityratty.com/article/866587460674cd492103d30bf6cdbe4f</guid>
      <description><![CDATA[Hi folks, Eric Bidstrup here
We interrupt our regular schedule of blog postings to offer this special post for Super Tuesday given the subject matter. Hope you enjoy
This year is a presidential...]]></description>
      <content:encoded><![CDATA[<P class=MsoNormal style="MARGIN: 0in 0in 10pt"><FONT size=3><FONT face=Calibri>Hi folks, Eric Bidstrup here.<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></FONT></FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 10pt"><FONT face=Calibri size=3>We interrupt our regular schedule of blog postings to offer this special post for “</FONT><A href="http://en.wikipedia.org/wiki/Super_Tuesday" mce_href="http://en.wikipedia.org/wiki/Super_Tuesday"><FONT face=Calibri size=3>Super Tuesday</FONT></A><FONT size=3><FONT face=Calibri>” given the subject matter. Hope you enjoy…<o:p></o:p></FONT></FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 10pt"><FONT face=Calibri size=3>This year is a presidential election year in the United States. Selecting a new president is perhaps the ultimate example of the importance of having a trustworthy election process. There have been some well chronicled examples of elections with extremely close results, where the winner’s margin of victory was perhaps smaller than the election system’s margin of error. The term “</FONT><A href="http://en.wikipedia.org/wiki/Hanging_chad" mce_href="http://en.wikipedia.org/wiki/Hanging_chad"><FONT face=Calibri size=3>Hanging Chads</FONT></A><FONT face=Calibri size=3>,” from the </FONT><A href="http://en.wikipedia.org/wiki/United_States_presidential_election%2C_2000" mce_href="http://en.wikipedia.org/wiki/United_States_presidential_election%2C_2000"><FONT face=Calibri size=3>2000 U.S Presidential election</FONT></A><FONT face=Calibri size=3>, is now part of the American vocabulary, and locally here in Washington State our </FONT><A href="http://en.wikipedia.org/wiki/Washington_gubernatorial_election%2C_2004" mce_href="http://en.wikipedia.org/wiki/Washington_gubernatorial_election%2C_2004"><FONT face=Calibri size=3>last gubernatorial election in 2004</FONT></A><FONT size=3><FONT face=Calibri> required 3 recounts with the final winner being determined by a margin of only 129 votes, or 0.0045% of the popular vote. <o:p></o:p></FONT></FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 10pt"><FONT size=3><FONT face=Calibri>The populace demands confidence that, even in close elections, the election result accurately reflects the voters’ intent. In theory, such precision can be improved by using computers and technology. <o:p></o:p></FONT></FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 10pt"><FONT face=Calibri size=3>However, it seems that every recent election season brings stories in the media about security concerns regarding voting machine (and their software) security. A recent </FONT><A href="http://www.nytimes.com/2008/01/06/magazine/06Vote-t.html?_r=2&amp;oref=slogin&amp;oref=slogin" mce_href="http://www.nytimes.com/2008/01/06/magazine/06Vote-t.html?_r=2&amp;oref=slogin&amp;oref=slogin"><FONT face=Calibri size=3>New York Times article</FONT></A><FONT face=Calibri size=3> provides a good overview of voting machine security concerns; and academic studies on voting systems last year in </FONT><A href="http://www.sos.ca.gov/elections/elections_vsr.htm" mce_href="http://www.sos.ca.gov/elections/elections_vsr.htm"><FONT face=Calibri size=3>California</FONT></A><FONT face=Calibri size=3>, </FONT><A href="http://voter.engr.uconn.edu/voter/Reports.html" mce_href="http://voter.engr.uconn.edu/voter/Reports.html"><FONT face=Calibri size=3>Connecticut</FONT></A><FONT face=Calibri size=3>, </FONT><A href="http://www.sait.fsu.edu/news/2007-03-05-essr.shtml" mce_href="http://www.sait.fsu.edu/news/2007-03-05-essr.shtml"><FONT face=Calibri size=3>Florida</FONT></A><FONT face=Calibri size=3>, and </FONT><A href="http://www.crypto.com/blog/ohio_voting/" mce_href="http://www.crypto.com/blog/ohio_voting/"><FONT face=Calibri size=3>Ohio</FONT></A><FONT size=3><FONT face=Calibri> <SPAN style="mso-spacerun: yes">&nbsp;</SPAN>provide some interesting insights about security concerns and vulnerabilities in voting systems from several vendors. <o:p></o:p></FONT></FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 10pt"><FONT size=3><FONT face=Calibri>These analyses are fascinating to us, because they offer an opportunity to see how a set of experts look at products other than ours.<SPAN style="mso-spacerun: yes">&nbsp; </SPAN>Applied security researchers often analyze our products, and often share their processes and tools with us, but it’s rare to see a top-to-bottom product review released.<SPAN style="mso-spacerun: yes">&nbsp; </SPAN>In California, there was both white and black box testing done by different teams, and we’ve studied these reports to see the perceptions of development practices from other vendors and results of a different type of review process.<o:p></o:p></FONT></FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 10pt"><FONT size=3><FONT face=Calibri>Something my colleagues and I find very interesting is that many of the vulnerabilities noted in these reports could have been prevented by following the requirements in Microsoft’s Security Development Lifecycle. The studies performed in California (prepared at UC Berkeley but created by teams of academics from across the United States) included detailed source code analysis. I’ll select out a few examples from those studies and describe them here. (Note: I’m deliberately picking a few examples from each vendor assessed in the study. I am not attempting to criticize any specific vendor, but rather am trying to illustrate examples of areas where application of the SDL could help contribute towards society’s need for trustworthy computing in a very visible and important application.) <o:p></o:p></FONT></FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 10pt"><FONT face=Calibri size=3>Let’s start with the </FONT><A href="http://www.sos.ca.gov/elections/voting_systems/ttbr/sequoia-source-public-jul26.pdf" mce_href="http://www.sos.ca.gov/elections/voting_systems/ttbr/sequoia-source-public-jul26.pdf"><FONT face=Calibri size=3>Source Code Review of the Sequoia Voting System</FONT></A><FONT size=3><FONT face=Calibri>. Two examples from the executive summary are interesting:<o:p></o:p></FONT></FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 10pt 0.5in"><FONT face=Calibri><B style="mso-bidi-font-weight: normal"><SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%">“<I style="mso-bidi-font-style: normal">Cryptography</I></SPAN></B><I style="mso-bidi-font-style: normal"><SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%">. …Many cryptographic functions are implemented incorrectly, based on weak algorithms with known flaws, or used in an ineffective or insecure manner. Of particular concern is the fact that virtually all cryptographic key material is permanently hardcoded in the system (and is apparently identical in all Sequoia hardware shipped to different jurisdictions)…<o:p></o:p></SPAN></I></FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 10pt 0.5in"><FONT face=Calibri><B style="mso-bidi-font-weight: normal"><I style="mso-bidi-font-style: normal"><SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%">Software Engineering</SPAN></I></B><I style="mso-bidi-font-style: normal"><SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%">. …The software suffers from numerous programming errors, many of which have a high potential to introduce or exacerbate security weaknesses. These include buffer overflows, format string vulnerabilities, and type mismatch errors….</SPAN></I><SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%">”<o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 10pt"><FONT face=Calibri size=3>A deeper reading of the cryptographic concerns (page 29 in report) notes concerns (amongst others) over the use of a flawed implementation of the SHA hash algorithm and use of the Data Encryption Standard (DES) algorithm. The SDL has specific policies outlining appropriate selection of cryptographic algorithms. <SPAN style="mso-spacerun: yes">&nbsp;</SPAN>For example, DES is prohibited except for backwards compatibility. SDL also requires that applications use operating system cryptographic functions and libraries. The cryptography team in the operating systems group is supported by world-class cryptographers who carefully scrutinize the implementation of crypto algorithms, and additionally these operating system functions are formally reviewed and certified by the </FONT><A href="http://csrc.nist.gov/groups/STM/cmvp/" mce_href="http://csrc.nist.gov/groups/STM/cmvp/"><FONT face=Calibri size=3>National Institute of Standards and Technology (NIST) Cryptographic Module Validation Program (CMVP) who validates cryptographic modules meet Federal Information Processing Standards (FIPS)</FONT></A><FONT size=3><FONT face=Calibri>. Most application developers are not cryptographers and hence are unlikely to encode crypto algorithms correctly. The SDL requires the use of standard crypto functions and outlines requirements on algorithm selection, key length and key management. <o:p></o:p></FONT></FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 10pt"><FONT face=Calibri size=3>Moving to the software engineering concerns; while several common coding and design concerns are noted (e.g. input validation) I want to select one with a bit more subtlety: running code from USB sticks (page 37 in report). From the report, it appears the code present on the USB sticks is used to program a component (HAAT) of their client (WinEDS) to prepare for a specific election.<SPAN style="mso-spacerun: yes">&nbsp; </SPAN>The valid concern noted by the study is that USB sticks used by WinEDS to configure the HAAT are implicitly trusted to have appropriate authorization to program the voting devices for an election, and that a formal authorization framework didn’t appear to be present. The implication being (as stated in the report): “<I style="mso-bidi-font-style: normal">If such a stick is used in a HAAT that has been compromised by an attacker, or an attacker can provide a maliciously modified USB stick in place of a legitimate one, the attacker could surreptitiously take complete control over the WinEDS client</I>”. Basically, this is a potential “</FONT><A href="http://en.wikipedia.org/wiki/Rootkit" mce_href="http://en.wikipedia.org/wiki/Rootkit"><FONT face=Calibri size=3>rootkit</FONT></A><FONT size=3><FONT face=Calibri>” for election systems. A threat model, a fundamental design requirement of the SDL, could help uncover such design issues and illustrate the need for mitigations. <o:p></o:p></FONT></FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 10pt"><FONT face=Calibri size=3>Now, let’s turn to the </FONT><A href="http://www.sos.ca.gov/elections/voting_systems/ttbr/Hart-source-public.pdf" mce_href="http://www.sos.ca.gov/elections/voting_systems/ttbr/Hart-source-public.pdf"><FONT face=Calibri color=#0000ff size=3>Source Code Review of the Hart InterCivic Voting System</FONT></A><FONT size=3><FONT face=Calibri>. I’ll try to keep my commentary balanced by selecting two examples here as well:<o:p></o:p></FONT></FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 10pt"><FONT size=3><FONT face=Calibri>From the executive summary:<o:p></o:p></FONT></FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; LINE-HEIGHT: normal; mso-layout-grid-align: none"><FONT face=Calibri><B><I style="mso-bidi-font-style: normal"><SPAN style="FONT-SIZE: 10pt; mso-bidi-font-family: URWPalladioL-Bold">“Unsecured network interfaces …</SPAN></I></B><I style="mso-bidi-font-style: normal"><SPAN style="FONT-SIZE: 10pt; mso-bidi-font-family: URWPalladioL-Roma"> Voters can connect to unsecured network links in a polling place to subvert eSlates, as well as to eavesdrop on cast votes and to inject new votes. Poll workers can connect to JBCs or eScans over the management interfaces and perform back-office functions such as modifying the device software. The impact of this is that a malicious voter could potentially take over one or more eSlates in a precinct and a malicious poll worker could potentially take over all the devices in a precinct. …<o:p></o:p></SPAN></I></FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; LINE-HEIGHT: normal; mso-layout-grid-align: none"><I style="mso-bidi-font-style: normal"><SPAN style="FONT-SIZE: 10pt; mso-bidi-font-family: URWPalladioL-Roma"><o:p><FONT face=Calibri>&nbsp;</FONT></o:p></SPAN></I></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; LINE-HEIGHT: normal; mso-layout-grid-align: none"><FONT face=Calibri><B><I style="mso-bidi-font-style: normal"><SPAN style="FONT-SIZE: 10pt; mso-bidi-font-family: URWPalladioL-Bold">Failure to protect ballot secrecy </SPAN></I></B><I style="mso-bidi-font-style: normal"><SPAN style="FONT-SIZE: 10pt; mso-bidi-font-family: URWPalladioL-Roma">Hart’s system fails to adequately protect ballot secrecy...”<o:p></o:p></SPAN></I></FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 10pt"><o:p><FONT face=Calibri size=3>&nbsp;</FONT></o:p></P>
<P class=MsoNormal style="MARGIN: 0in 0in 10pt"><FONT size=3><FONT face=Calibri>The concerns about unsecured network interfaces are discussed in the context of authentication and least privilege (pages 24-25). While that is certainly a reasonable perspective, with the SDL we take a broader view and require all teams to threat model the attack surface of the software being developed. Attack surface is the enumeration of all possible entry points that an attacker could use to compromise software (code listening to network interfaces, code that accepts data from external sources, etc). The SDL requires development teams to both minimize attack surface in the software they are building and to consider attacks from each entry point on the attack surface to ensure that mitigations are present. It would appear that these examples show that the development teams didn’t adopt such a systematic approach, or failed to think about mitigations of each possible attack if they did.<o:p></o:p></FONT></FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 10pt"><FONT face=Calibri size=3>Ballot secrecy is an example where security and privacy concerns intersect. Many people confuse security and privacy, and both are fundamental to trust. Privacy addresses a wide variety of concerns about many types of data (such as Personally Identifiable Data (PII), ballot data, etc.), how it’s handled (gathered, transmitted, stored, and disposed of) and what rights and expectations different stakeholders may have regarding that data. (Tina Knutson gave a great overview on these issues in a previous blog posting “</FONT><A href="http://blogs.msdn.com/sdl/archive/2007/05/10/privacy-is-not-just-about-data-security.aspx" mce_href="http://blogs.msdn.com/sdl/archive/2007/05/10/privacy-is-not-just-about-data-security.aspx"><FONT face=Calibri size=3>Privacy is not just about data security</FONT></A><FONT size=3><FONT face=Calibri>“). Security provides the mechanisms, policies, and practices to enforce privacy requirements. Given the intertwined nature of these issues, both are addressed in the SDL. <o:p></o:p></FONT></FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 10pt"><FONT size=3><FONT face=Calibri>The concerns about vote storage (section 6.8, page 58 of report) review some classic challenges in software security and privacy with weak random number generation. Randomization is important here since it controls how votes are stored in memory, and weak randomization enables someone to reverse engineer how individual voters voted by examining the aggregate tally of votes (which can be found on the Mobile Ballot Boxes “MBB”) in conjunction with the audit log. The MBB has mitigations in place to protect integrity (tampering) of votes, but doesn’t appear to protect against information disclosure. The SDL cryptographic policies also cover correct random number generation. The challenge of <B style="mso-bidi-font-weight: normal">fully</B> considering <B style="mso-bidi-font-weight: normal">all</B> ways in which data can be reverse engineered, contextualized (order of log entries providing information that can be linked to individuals’ choices), and correlated with other data sources is a growing challenge. In the SDL privacy policies, we call attention to these issues, but it’s still a challenge.<o:p></o:p></FONT></FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 10pt"><FONT face=Calibri size=3>Next, let’s look at the </FONT><A href="http://www.sos.ca.gov/elections/voting_systems/ttbr/diebold-source-public-jul29.pdf" mce_href="http://www.sos.ca.gov/elections/voting_systems/ttbr/diebold-source-public-jul29.pdf"><FONT face=Calibri color=#0000ff size=3>Source Code Review of the Diebold Voting System</FONT></A><FONT size=3><FONT face=Calibri>. Again, I’ll pick two subjects.<o:p></o:p></FONT></FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; LINE-HEIGHT: normal; mso-layout-grid-align: none"><FONT face=Calibri><B><I style="mso-bidi-font-style: normal"><SPAN style="FONT-SIZE: 10pt; mso-bidi-font-family: URWPalladioL-Bold">“Vulnerability to malicious software: </SPAN></I></B><I style="mso-bidi-font-style: normal"><SPAN style="FONT-SIZE: 10pt; mso-bidi-font-family: URWPalladioL-Roma">The Diebold software contains vulnerabilities that could allow an attacker to install malicious software on voting machines or on the election management system…<o:p></o:p></SPAN></I></FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; LINE-HEIGHT: normal; mso-layout-grid-align: none"><I style="mso-bidi-font-style: normal"><SPAN style="FONT-SIZE: 10pt; mso-bidi-font-family: CMSY10"><o:p><FONT face=Calibri>&nbsp;</FONT></o:p></SPAN></I></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; LINE-HEIGHT: normal; mso-layout-grid-align: none"><FONT face=Calibri><B><I style="mso-bidi-font-style: normal"><SPAN style="FONT-SIZE: 10pt; mso-bidi-font-family: URWPalladioL-Bold">Vulnerability to malicious insiders: </SPAN></I></B><I style="mso-bidi-font-style: normal"><SPAN style="FONT-SIZE: 10pt; mso-bidi-font-family: URWPalladioL-Roma">The Diebold system lacks adequate controls to ensure that county workers with access to the GEMS central election management system do not exceed their authority….”<o:p></o:p></SPAN></I></FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 10pt"><o:p><FONT face=Calibri size=3>&nbsp;</FONT></o:p></P>
<P class=MsoNormal style="MARGIN: 0in 0in 10pt"><FONT size=3><FONT face=Calibri>Let’s look at the “Malicious Software” first: While there’s a lot of discussion of general concerns with viruses and malicious payloads, I’d like to drill down on a specific case noted in section 4.2.3 (page 29). The typical concerns around string handling in C/C++ and buffer overflows are mentioned. What is interesting is that in many places this system uses the Microsoft Foundation Classes (MFC) CString class to help mitigate such concerns. The problem noted is that this practice is not consistently followed, and in fact there is a case of one specific function making calls to both CString *and* a standard C string library, <I style="mso-bidi-font-style: normal">in the same function</I>. So here it appears the engineering team had the right idea by trying to remove calls to potentially risky C string library functions (just as required in SDL), but they just weren’t able to consistently and completely apply it.<o:p></o:p></FONT></FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 10pt"><FONT face=Calibri size=3>Regarding the executive summary concern about malicious insiders, I’m inclined to attribute it to what’s described in section 4.3 on page 30: “<I style="mso-bidi-font-style: normal">No formal threat model or security plan</I>” and “<I style="mso-bidi-font-style: normal">No formal security training</I>”. Both of these are pivotal elements in the SDL. Several comments are offered to the effect that “<I style="mso-bidi-font-style: normal">security measures that are in place appeared to be ad hoc</I>”, and “<I style="mso-bidi-font-style: normal">When new developers arrive at the company, they do not receive any kind of security training</I>”. We’ve blogged here in the past about the importance of both areas, so I won’t repeat that again. (See Adam’s Threat Modeling series and Dave’s “</FONT><A href="http://blogs.msdn.com/sdl/archive/2007/05/02/security-education-v-security-training.aspx" mce_href="http://blogs.msdn.com/sdl/archive/2007/05/02/security-education-v-security-training.aspx"><FONT face=Calibri size=3>Security Education v. Security Training</FONT></A><FONT size=3><FONT face=Calibri>” posts respectively for more info).<o:p></o:p></FONT></FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 10pt"><B style="mso-bidi-font-weight: normal"><FONT size=3><FONT face=Calibri>Is the SDL enough to ensure trustworthy voting systems?<o:p></o:p></FONT></FONT></B></P>
<P class=MsoNormal style="MARGIN: 0in 0in 10pt"><FONT size=3><FONT face=Calibri>When I offered this blog post for the review of my colleagues, it generated some very interesting discussion. Some of my colleagues were worried that I would misrepresent the SDL as a panacea for creating perfectly trustworthy voting systems. Let me be clear: this is absolutely NOT the case. While the SDL could help mitigate repeating many of the problems identified in these studies, it’s worth noting that election systems have a number of unusual and unique requirements. For example, voters cannot review their voting records as they would their banking records to ensure that no fraud has been committed – since the ability to do so would typically enable vote-selling and coercion.&nbsp; Alternate techniques are therefore required to allow voters to verify that their votes have been properly counted. Such requirements force the adoption of “extraordinary” techniques that go beyond those of secure software engineering.<SPAN style="mso-spacerun: yes">&nbsp; </SPAN>Furthermore, the expectations of society on the trustworthiness of voting systems are much greater as compared to other types of software (for example: the latest XBOX game title). I’ll further explore differences in how different people think about “degrees of trustworthiness” (aka “assurance” or “robustness”) in a future posting. <o:p></o:p></FONT></FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 10pt"><B style="mso-bidi-font-weight: normal"><FONT size=3><FONT face=Calibri>Summary<o:p></o:p></FONT></FONT></B></P>
<P class=MsoNormal style="MARGIN: 0in 0in 10pt"><FONT size=3><FONT face=Calibri>Let me wrap by saying this, building secure software is difficult. Prior to the advent of Trustworthy Computing and the Security Development Lifecycle here at Microsoft, I’d bet that many of the issues noted in these reports would have applied to earlier Microsoft products too. Some might think I’m throwing stones while living in a glass house, but that is not my intent. While Microsoft products are not vulnerability free, we continue to systematically analyze the sources of vulnerabilities in our software. We continue to modify our engineering practices and tools to better identify potential vulnerabilities and mitigate them before software is released. With increasing awareness and concerns over the trustworthiness of computers in general, the entire industry needs to improve. Given the importance of how we choose to organize ourselves as a society and elect representatives to govern us, voting systems are a great place to step up both in the context of the computing industry, and to better serve society.<o:p></o:p></FONT></FONT></P>
<P class=MsoNormal style="MARGIN: 0in 0in 10pt"><FONT size=3><FONT face=Calibri>I believe many of the issues found in these voting systems would not have entered the system if the SDL was used to design and build the voting systems.<o:p></o:p></FONT></FONT></P><img src="http://blogs.msdn.com/aggbug.aspx?PostID=7450582" width="1" height="1">]]></content:encoded>
      <pubDate>Mon, 04 Feb 2008 20:34:00 +0000</pubDate>
      <category domain="http://securityratty.com/tag/machine security concerns">machine security concerns</category>
      <category domain="http://securityratty.com/tag/security concerns">security concerns</category>
      <category domain="http://securityratty.com/tag/election systems">election systems</category>
      <category domain="http://securityratty.com/tag/election">election</category>
      <category domain="http://securityratty.com/tag/security">security</category>
      <category domain="http://securityratty.com/tag/security researchers">security researchers</category>
      <category domain="http://securityratty.com/tag/election systems margin">election systems margin</category>
      <category domain="http://securityratty.com/tag/margin">margin</category>
      <category domain="http://securityratty.com/tag/election management system">election management system</category>
      <source url="http://blogs.msdn.com/sdl/archive/2008/02/04/more-trustworthy-election-systems-via-sdl.aspx">More trustworthy election systems via SDL?</source>
    </item>
    <item>
      <title><![CDATA[Fuzz Testing at Microsoft and the Triage Process]]></title>
      <link>http://securityratty.com/article/9ef13cf9fa3328944d25b8d603d02a06</link>
      <guid>http://securityratty.com/article/9ef13cf9fa3328944d25b8d603d02a06</guid>
      <description><![CDATA[Scott Lambert here. I work on the Security Engineering Tools team where we're responsible for researching, developing and publishing tools to internal product and service teams. These include fuzzing,...]]></description>
      <content:encoded><![CDATA[<P mce_keep="true">Scott Lambert here.&nbsp; I work on the&nbsp;Security Engineering&nbsp;Tools team where we're responsible for researching, developing and publishing tools to internal product and service teams. &nbsp;These include fuzzing, binary analysis and attack surface analysis tools.</P>
<P>Previously, James Whittaker posted a blog entry on <A href="http://blogs.msdn.com/sdl/archive/2007/05/24/testing-in-the-sdl.aspx">Testing in the SDL</A> in which he mentioned that many folks equate fuzz testing with security testing.&nbsp; While fuzz testing doesn't come close to describing how security testing is done at Microsoft it does happen to be one of our most scalable testing approaches to detecting program failures that may have security implications.&nbsp; </P>
<P>As Michael Howard has pointed out <A href="http://blogs.msdn.com/sdl/archive/2007/04/26/lessons-learned-from-the-animated-cursor-security-bug.aspx">before</A>, we do our best to ensure that the SDL incorporates lessons learned from vulnerabilities that required us to release security updates.&nbsp; It turns out that the animated cursor bug patched in <A href="http://www.microsoft.com/technet/security/bulletin/ms07-017.mspx">MS07-017</A> had a positive impact on the automatic triaging our fuzz testing tools perform. &nbsp;In this post, I'd like to shed some light on how we monitor for program failures when fuzzing parsers and how the recent animated cursor bug, <A href="http://www.microsoft.com/technet/security/bulletin/ms07-017.mspx">MS07-017</A> caused us to revisit and ultimately improve our fuzzing tools.</P>
<P><B>Background</B><B></B></P>
<P>For our purposes, fuzz testing is a method for finding program failures (code errors) by supplying malformed input data to program interfaces (entry points) that parse and consume this data (e.g. file, network, registry, shared memory parsers).&nbsp; At Microsoft, we view fuzz testing as six distinct stages in which the output of each stage can impact or influence both the current and next iteration through the stages (e.g. after completing analysis work in stage 5 you could decide to change how you malform and deliver fuzzed data [stage 2 and 3], which exceptions get logged [stage 4], which tests you re-run [stage 6] and even which parsers you might decide to go after next [stage 1], etc).&nbsp; Below is a brief listing of each stage and its associated tasks.</P>
<P>Stage 1: Prerequisites</P>
<UL>
<LI>Identifying the targets (program interfaces to fuzz)</LI>
<LI>Prioritizing your efforts (test planning)</LI>
<LI>Setting Bug Bar</LI></UL>
<P>Stage 2: Creation of fuzzed data (malformed data)</P>
<UL>
<LI>Will we be format-aware (e.g. most files follow a format)? Context-aware (e.g. order and/or timing of data may be important)?</LI>
<LI>Will we use existing data (mutation) or generate it from scratch (generation)?</LI>
<LI>Will the malformations we apply be based on type? Use interesting patterns? Over how many bits/bytes?</LI>
<LI>Will we apply malformations with or without restriction? Are we going to be deterministic or random or both? How many times in a single iteration do we apply any given malformation?</LI></UL>
<P>Stage 3: Delivery of fuzzed data to the application under test</P>
<UL>
<LI>Determining the best method to get the application under test to consume the fuzzed data (e.g. load path from cmd-line or GUI; API hooking; MITM proxies; DLL redirection; in-memory start-stop-rewind, etc)</LI>
<LI>Implementing the appropriate delivery mechanism and conducting the test</LI></UL>
<P>Stage 4: Monitoring of application under test for signs of failure</P>
<UL>
<LI>What should we look for?</LI>
<LI>What do we do when we see it?</LI></UL>
<P>Stage 5: Triaging Results</P>
<UL>
<LI>How can we classify and analyze issues found?</LI></UL>
<P>Stage 6: Identify root cause, fix bugs, rerun failures, analyze coverage data (rinse and repeat)</P>
<P><B>How we do file fuzzing</B><B></B></P>
<P>There are a number of approaches taken by product teams to meet the SDL file fuzzing requirements.&nbsp; They often include the use of generation and mutation-based fuzzers as well as a combination of multiple internal and externally available fuzzing tools and/or frameworks.&nbsp; </P>
<P>When fuzzing file parsers, we monitor for both handled and unhandled exceptions in the application under test.&nbsp; Exceptions are events that typically represent error conditions encountered during the execution of an application.&nbsp; They can be generated both by the hardware (initiated by the CPU) and/or software (initiated by the executing program or the OS).&nbsp; To monitor for these exceptions, we created a mini-debugger using the <A href="http://msdn2.microsoft.com/en-us/library/ms679300.aspx">Win32 Debugging APIs</A> (For an example of how to integrate a debugger into your fuzz testing tool, check out Michael Howard and Steve Lipner's SDL Book at <A href="http://www.microsoft.com/MSPress/books/8753.asp" target=_blank>http://www.microsoft.com/MSPress/books/8753.asp</A>).&nbsp; The mini-debugger launches the application under test and monitors the parent and all subsequent child processes and associated threads.&nbsp; When an exception occurred, the first version of this tool simply logged the file that caused the exception along with associated details such as the timestamp, exception code, exception address, stack trace and dump file.&nbsp; More recent versions have included the ability to monitor for CPU and memory spikes as well as enabling <A href="http://msdn2.microsoft.com/en-us/library/ms220938(VS.80).aspx">full page heap</A> settings on all processes launched from the mini-debugger.</P>
<P>As a general rule, <B>all</B> exceptions must be triaged (reviewed) by the tester to determine if a bug needs to be filed.&nbsp; When fuzzing over a period of time however, we might generate hundreds of exceptions and it becomes a very labor-intensive process to sift through all of them.&nbsp; What we needed was a way to ease the burden placed on the tester.</P>
<P>To that extent, the mini-debugger was extended to enable the automatic "bucketization" of logged exceptions to reduce the chance of having to look at duplicates during the triaging process.&nbsp; This was accomplished by creating unique bucket ids calculated from the stack trace using both symbols and offset when the information is available.&nbsp; The bucket id was used to name a folder that was created in the file system to refer to a unique application exception.&nbsp; When an exception occurred, we calculated a hash (bucket id) of the stack trace and determined if we had already seen this exception.&nbsp; If so, we logged the associated details in a sub-directory under the bucket id folder to which the exception belonged.&nbsp; The sub-directory name was created from the name of the fuzzed file that caused the exception.&nbsp; Thus, we were able to reduce the number of potential exceptions that a tester would have to look at during the triage process.&nbsp; It is often the case that certain exceptions are noisy and/or expected so we also added the ability for the tester to dampen exceptions by exception code.&nbsp; Dampening ensured that those exceptions were not logged (recorded) for triage during a fuzz run.&nbsp; Nonetheless, despite our best efforts it is still possible for two different stack traces to have the same underlying root cause.</P>
<P>Even with all of this automated assistance, the tester might still have several hundred cases to triage.&nbsp; In an effort to prioritize which cases should be triaged first, we introduced the notion of classifying exceptions.&nbsp; Again, we extended the mini-debugger to perform classification on the exception code and relevant details.&nbsp; In particular, we added an extra hierarchy over the automatically generated directory structure described above.&nbsp; To do this we introduced the following categories of exceptions:</P>
<UL type=disc>
<LI>Must Fix</LI>
<LI>Further Investigation necessary</LI>
<LI>Usually not exploitable</LI></UL>
<P>I know what you're thinking, but remember that this classification doesn't exclude a tester from the requirement of having to triage <B>all </B>exceptions.&nbsp; The "Must Fix" category was composed of write access violations, read access violations on EIP, /GS and NX related access violations and read access violations where any one of the following was true*:&nbsp; </P>
<UL type=disc>
<LI>The access violation happens on a rep assembly instruction (on an Intel processor) where the count register (ecx) is large.&nbsp; </LI>
<LI>The access violation happens on a mov instruction where the result is used as the destination of a call in the instructions immediately after the mov.</LI>
<LI>The access violation happens on a mov instruction where the result is later used in a rep instruction as the source (esi), destination (edi) or count (ecx).</LI></UL>
<P>*<I>Fully automating the classification of these cases is complex and almost always requires an entire execution trace.&nbsp;&nbsp; As such, teams are also provided with guidance to assist them during their analysis when our tool is unable to classify beyond "read and write access violations".</I></P>
<P>The "Further Investigation necessary" category was composed of read access violations that didn't meet the criteria above as well as other specific cases.&nbsp; Finally, the "Usually not exploitable" category was composed of other exceptions such as divide-by-zero, C++ exceptions and the like.&nbsp; Another thing to keep in mind is that the interpretation of "Usually not exploitable" is different for server-based components.&nbsp; In other words, a divide-by-zero exception in a server product is probably more than just a robustness issue...it might be a denial of service!</P>
<P>Remember that regardless of this classification the tester is still required to triage <B>all </B>exceptions and file bugs accordingly.&nbsp; I'll defer more details on the subject of exploitability of program failures to the upcoming annual security issue of MSDN Magazine in November.</P>
<P>To recap, we had a debugging plug-in (mini-debugger) that not only monitored for exceptions but also reduced the number of exceptions to triage after a fuzzing session was completed.&nbsp; This also included monitoring for CPU and memory spikes as well as the use of page heap to capture heap corruptions that might not manifest themselves as an application crash (exception) during the fuzz session.&nbsp; What could go wrong?&nbsp; Enter <A href="http://www.microsoft.com/technet/security/bulletin/ms07-017.mspx">MS07-017</A>.&nbsp; The software responsible for invoking the vulnerable code [to parse animated cursors] made use of an exception handler to recover from pretty much any exception that could be generated and continue operating as if nothing had occurred (Read more about it at <A href="http://blogs.msdn.com/sdl/archive/2007/04/26/lessons-learned-from-the-animated-cursor-security-bug.aspx">http://blogs.msdn.com/sdl/archive/2007/04/26/lessons-learned-from-the-animated-cursor-security-bug.aspx</A>).</P>
<P>The Animated Cursor bug caused us to revisit our mini-debugger.&nbsp; Why?&nbsp; Put simply, we hadn't introduced the "bucketization" and classification mechanisms for first-chance exceptions.&nbsp; Naturally, this meant the tester was back to square one in terms of having no assistance on the labor-intensive triaging process. To deal with the "recover from anything" exception handling code we introduced the concept of classifying and bucketing "dangerous" first chance exceptions to help reduce the number of first chance cases the tester would need to triage.&nbsp; This means we look for both write access violations and read access violations on EIP.&nbsp; Additionally, we added support to continue after a first chance exception, allowing exception handlers to be called and continue and possibly proceed on to other more interesting crashes.</P>
<P>As you can see fuzz testing scales pretty well, but simplifying and scaling the triage process is not an easy task.&nbsp; Even more challenging is the integration of technology into an effective lifecycle. We're constantly working with teams within Microsoft to further advance our tools, you can learn more by viewing <A class="" href="http://research.microsoft.com/research/pubs/view.aspx?id=1333&amp;type=Technical+Report" mce_href="http://research.microsoft.com/research/pubs/view.aspx?id=1333&amp;type=Technical+Report">http://research.microsoft.com/research/pubs/view.aspx?id=1333&amp;type=Technical+Report</A> and <A class="" href="http://research.microsoft.com/Pex" mce_href="http://research.microsoft.com/Pex">http://research.microsoft.com/Pex</A>/.&nbsp; </P>
<P mce_keep="true">-Scott Lambert</P><img src="http://blogs.msdn.com/aggbug.aspx?PostID=5016384" width="1" height="1">]]></content:encoded>
      <pubDate>Thu, 20 Sep 2007 14:52:00 +0000</pubDate>
      <category domain="http://securityratty.com/tag/chance exceptions">chance exceptions</category>
      <category domain="http://securityratty.com/tag/exceptions">exceptions</category>
      <category domain="http://securityratty.com/tag/exception handler">exception handler</category>
      <category domain="http://securityratty.com/tag/exception">exception</category>
      <category domain="http://securityratty.com/tag/divide-by-zero exception">divide-by-zero exception</category>
      <category domain="http://securityratty.com/tag/exception code">exception code</category>
      <category domain="http://securityratty.com/tag/triage process">triage process</category>
      <category domain="http://securityratty.com/tag/process">process</category>
      <category domain="http://securityratty.com/tag/first-chance exceptions">first-chance exceptions</category>
      <source url="http://blogs.msdn.com/sdl/archive/2007/09/20/fuzz-testing-at-microsoft-and-the-triage-process.aspx">Fuzz Testing at Microsoft and the Triage Process</source>
    </item>
  </channel>
</rss>
