<?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: triage]]></title>
    <link>http://securityratty.com/tag/triage</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[Q&A with Doug McClure: What Makes BSM Successful?]]></title>
      <link>http://securityratty.com/article/ac3c26a14f128a8ecb49f7c474cbb36e</link>
      <guid>http://securityratty.com/article/ac3c26a14f128a8ecb49f7c474cbb36e</guid>
      <description><![CDATA[Yesterday we featured our initial Q&amp;A with Doug McClure , who took some time to answer some strategic questions on BSM Lite. Today, Doug shares his thoughts on BSM and CMDB strategies for companies...]]></description>
      <content:encoded><![CDATA[<p>Yesterday we featured <a href="http://blog.sciencelogic.com/qa-with-doug-mcclure-is-bsm-lite-the-answer/07/2008" target="_blank">our initial Q&amp;A</a> with <a href="http://dougmcclure.net/blog/" target="_blank">Doug McClure</a>, who took some time to answer some strategic questions on BSM Lite. Today, Doug shares his thoughts on BSM and CMDB strategies for companies and how his stint in the U.S. Navy helped shape his future passion for BSM.</p>
<p><strong><em>ScienceLogic:</em></strong> Can you share any of the strategies/advice that you give to companies embarking on their BSM journeys?</p>
<p><strong><em>Doug McClure:</em></strong> Well, first they&#8217;ve got to have a BSM strategy. Nearly all the clients I talk to or hear about wanting to do BSM do not have a BSM strategy. I talk a lot about this on my blog and with clients and it is relevant whether you&#8217;re going to think about &#8220;BSM Lite&#8221; or &#8220;BSM Heavy&#8221; approaches.</p>
<p>Once we have a BSM strategy, we need to establish a BSM roadmap that guides us in how we’ll implement the BSM strategy in a more tactical manner, focusing on short term iterative quick wins and 30-60-90 day projects. For more of my thoughts on BSM strategy and roadmapping, see the following blog posts.</p>
<ul>
<li>
<h3><a href="http://dougmcclure.net/blog/2007/03/elements-of-business-service-management-part-3-getting-business-service-management-on-the-radar-screen/" target="_blank">Elements of Business Service Management Part 3: Getting Business Service Management on the Radar Screen</a></h3>
</li>
<li>
<h3><a href="http://dougmcclure.net/blog/2007/09/elements-of-business-service-management-part-4-what%e2%80%99s-your-business-service-management-strategy/" target="_blank">Elements of Business Service Management Part 4: What’s your Business Service Management Strategy?</a></h3>
</li>
</ul>
<p>As I&#8217;ve alluded to previously, a client first must define and understand what &#8220;BSM Lite&#8221; may mean to them. Don&#8217;t take what the analysts or the vendors pitch for what you should do to achieve BSM or what value you should get from it.</p>
<p>For any type of BSM to be successful, each client must define what BSM means to them and state what they expect to get from BSM. They must make it personal, make it a part of their company culture and elevate it to be as an important initiative as compliance, risk management, SOA, ITIL, or other initiatives may be within the company.</p>
<p>Please don&#8217;t get scared off from this strategy thing. Please don&#8217;t blow this off as something that the secret enterprise architecture council should be doing. If you&#8217;re unable to get an audience in these areas within your company, start within your own sphere of influence.</p>
<p>Your strategy could be as simple as enabling the local operations center to more efficiently classify, triage and resolve problems based on a simple business service or application contextual understanding. Focus on how this changes the game within your environment. Come up with your own metrics and measures to assess the value this has to this organizational use. Trust me, you&#8217;ll need to justify your investment some time in the future.</p>
<p>Another trait of successful BSM implementations is that of the formal monitoring and management tools group has established some sort of database or knowledge repository that enables them to &#8220;manage the business of IT management and monitoring&#8221; if you will. In my opinion, the vendor community has let their clients down significantly in this area. The CMDB may be the correct answer, but most companies just don’t value monitoring enough to demand that this be included in their formal CMDB initiatives.</p>
<p>In my last job, we developed an application that I referred to as the &#8220;Service Management Database&#8221; or &#8220;SMDB&#8221;. Others may call it something else, but in essence, it was the database that captured what was monitored, how it was monitored, who owned it, what business services and applications it supported, the impact an outage or event from it had on the business services or applications, etc.</p>
<p>One key component of this “SMDB” was establishing the relationships of real and synthetic user and transaction monitoring steps to associated servers and applications. This is a significant gap area in many tools and vendor CMDBs.</p>
<p>Clients who have instituted something formal such as this generally have a very good handle on management and monitoring within their environment. Far too many clients do not have adequate monitoring (read visibility) in place to begin their BSM journey.</p>
<p>I&#8217;d strongly recommend a good hard look at how well the client&#8217;s monitoring and management practices are implemented and managed. Simply put, if they don&#8217;t have adequate visibility into how well those business services and applications are performing, you can&#8217;t expect to manage what you can&#8217;t “see” that may be impacting the business, clients, revenue, etc.</p>
<p>Just ask yourself this – can you explicitly state what monitoring is in place for a given business service or application? Can you quantify the impact of a simple event to a business service or application? Can you explain why something is red, yellow, purple or green and what causes it to change from one color to another? If you can’t, your BSM journey will be challenging.</p>
<p>Those with formal CMDB initiatives have their hands full with high risk, long time to value projects to just get a handle with traditional configuration management models. Taking these low level configuration items (CI&#8217;s) and establishing application and service dependencies comes after a lot of work getting through the organizational challenges of getting systems access to populate the CMDB.</p>
<p>I strongly recommend that the formal monitoring and management tools group create an authoritative database that enables them to establish end-to-end visibility into the service and application delivery chain and the impacts it has on the business, customer, etc. This ultimately becomes part of a more realistic federated CMDB within the business.</p>
<p><strong>ScienceLogic:</strong> Can you provide an example of a successful implementation of BSM? Were there specific factors that especially contributed to its success?</p>
<p><strong><em>Doug McClure:</em></strong> I&#8217;ve touched on the highlights of the most successful BSM implementations throughout my previous answers. Clients that have rallied around an organizational change or transformation focusing every team member’s efforts and energy towards ensuring that the business goals and objectives are being met through the delivery of highly available business services and applications.</p>
<p>Far too often the “change” never happens and it’s the “talking heads” that are preaching to the choir about what should be done. Every person on the front line, in the support teams, at the help desk, etc. must understand how they support or impact the business in business terms. Try putting this simple phrase after job titles “Hi, my name is Doug. I’m a Systems Administrator, Supporting the Business”.</p>
<p>That was a mouthful, but simply put, these clients have an impressively instrumented business and IT environment with the right amount of visibility into each area, joined together with an organization that thinks, operates and responds based on their understanding of the business goals and objectives and how these business services and applications enable business success.</p>
<p>The operational model for an organization fully adopting BSM identifies ways to establish a service management mentality across the entire business service and application delivery and support chain. The delivery, operations and support organizations must be incented to manage the services and applications being delivered with this end-to-end context.</p>
<p>A leading, outside the box “service management organization” may include the traditional IT silos but within a matrixed fashion focused on one or more key business services and applications. The &#8220;service management organization&#8221; is then incented to work together, as a team, for the end-to-end delivery and support of these services or applications.</p>
<p>It’s no longer one’s job to just be the systems administrator, database administrator or network engineer, their job is now to support specific business services and applications. They provide the subject matter expertise needed to support the services and applications together, as a team, eliminating the finger pointing or “not my problem” attitudes that exist in the majority of IT organizations today.</p>
<p>Overall, the KISS approach is what will enable BSM of any type (lite, heavy) to be the most successful. If it just feels natural, doesn&#8217;t take any additional effort, clicks or tasks to do then it&#8217;s going to work. BSM should be transparent and not just another buzz word. It&#8217;s not a form that gets filled out or a special process to follow in the run book. It&#8217;s doing the right thing for the business, no matter what the situation, crisis, buzz word or technology initiative of the day is.</p>
<p><strong><em>ScienceLogic:</em></strong> How did you get involved in BSM?</p>
<p><strong><em>Doug McClure:</em></strong> I think the foundations of my service management background and passion were initially established during my service in the US Navy. Today, I relate that experience to what I call BSM for the Military or Mission Services Management (MSM).</p>
<p>We had been taught over and over that extreme attention to the details of the mission at hand (aka &#8220;the business&#8221;) was the number one priority and that all of our technology, services, and applications existed for those Sailors and Marines on the other end (the &#8220;customer&#8221;). I can recall countless instances where mission critical communications services (telephony, orderwires, teletypes, command and control systems, etc.) were impacted in one way or another. It was extremely critical that we understood who was impacted and to what degree so that contingency plans could be activated. We weren’t just talking about lost revenue, poor sales or customer experience; we were talking about human lives and the security of the United States.</p>
<p>It is that military bearing, attention to detail and real world experience that drives me with many of my modern day BSM endeavors. That migration from &#8220;Mission Services Management&#8221; to BSM was honed working for over 10 years working in the Internet Service Provider (ISP) and datacenter, hosting and colocation business.</p>
<p>In those rapid growth businesses during the Internet boom, service differentiation was what &#8220;made you millions&#8221; or paved your way to bankruptcy. The companies I worked for had an extreme passion and focus on ensuring that their services, applications and Internet access products were of the highest quality, highly reliable and just plain better than the competition.</p>
<p>Again, the IT infrastructure, service quality and customer experience relationship was ingrained in all of our heads. It was all hands on deck when Webmail, Internet access, DNS, or the network experienced problems. We were measured in terms of how many customers experienced a busy signal or dropped connection or if you couldn’t log in fast enough to read your email. Companies like Keynote Systems and LionBridge/Veritest/Inverse tested the quality of our networks, services and applications and publicly ranked us against our competition. We thought in terms of customer experience and impact every minute of the day, 24&#215;7.</p>
<p>It was in my last job managing a traditional enterprise management and monitoring development group for a nationwide ISP where I was able to work with emerging technology to help get a handle on the complexities of these rapidly growing IT environments filled with emerging technologies and products. Applying this early technology to complex service problems in our environment proved to me that the technology, coupled with the right emphasis on how the technology was implemented and an emphasis on the people and processes within the organization could bring BSM to life.</p>
<p>Where I felt left out in the cold was with my vendor relationship. While their technology gave me the potential, they didn&#8217;t teach me how to work through the organizational and technological problems to successfully implement the BSM strategy. My very first end-to-end BSM pilot was extremely successful and provided visibility into the IT environment and business service impact that have never been available before.</p>
<p>And here I am today, working at a software vendor for the first time. Welcome to the &#8220;dark side&#8221; as they say. The approach and methodology we followed for BSM has become the basis of the core BSM Methodology that I teach IBMers and our clients around the world today.</p>
<p>My personal mission and drive here at IBM Tivoli is to ensure that BSM is something that the typical monitoring tools administrator can actually implement and that our BSM story is something that any of our clients can be successful with. The sales and marketing slicks must be backed up by something like this whomever you are these days. Clients shouldn&#8217;t put up for “marketecture”, me too and gee whiz buzz words.</p>
<p>BSM takes a partnership and commitment to every client&#8217;s success, and I want to be involved in those BSM efforts in every industry or market worldwide. We need more thought leaders collaborating together in an open and public forum to change legacy attitudes about BSM and do what we can to enable client’s to be as successful as they can be.</p>
<p><a href="http://sharethis.com/item?&wp=abc&amp;publisher=ea11358c-69de-4e80-9804-e964a8930b70&amp;title=Q%26amp%3BA+with+Doug+McClure%3A+What+Makes+BSM+Successful%3F&amp;url=http%3A%2F%2Fblog.sciencelogic.com%2Fqa-with-doug-mcclure-what-makes-bsm-successful%2F07%2F2008">ShareThis</a></p>]]></content:encoded>
      <pubDate>Tue, 15 Jul 2008 15:02:39 +0000</pubDate>
      <category domain="http://securityratty.com/tag/management">management</category>
      <category domain="http://securityratty.com/tag/service management database">service management database</category>
      <category domain="http://securityratty.com/tag/management tools">management tools</category>
      <category domain="http://securityratty.com/tag/service management mentality">service management mentality</category>
      <category domain="http://securityratty.com/tag/business service management">business service management</category>
      <category domain="http://securityratty.com/tag/business service">business service</category>
      <category domain="http://securityratty.com/tag/business service impact">business service impact</category>
      <category domain="http://securityratty.com/tag/mission services management">mission services management</category>
      <category domain="http://securityratty.com/tag/database">database</category>
      <source url="http://blog.sciencelogic.com/qa-with-doug-mcclure-what-makes-bsm-successful/07/2008">Q&amp;A with Doug McClure: What Makes BSM Successful?</source>
    </item>
    <item>
      <title><![CDATA[Cyber Espionage]]></title>
      <link>http://securityratty.com/article/635f125a82a7957387c923247d583b77</link>
      <guid>http://securityratty.com/article/635f125a82a7957387c923247d583b77</guid>
      <description><![CDATA[Interesting investigative article from Business Week on Chinese cyber espionage against the U.S. government, and the government's reaction. When the deluge began in 2006, officials scurried to come up...]]></description>
      <content:encoded><![CDATA[<p>Interesting investigative article from <i><a href="http://www.businessweek.com/magazine/content/08_16/b4080032218430.htm">Business Week</a></i> on Chinese cyber espionage against the U.S. government, and the government's reaction.</p>

<blockquote>When the deluge began in 2006, officials scurried to come up with  software "patches," "wraps," and other bits of triage. The effort got serious last summer when top military brass discreetly summoned the chief executives or their representatives from the 20 largest U.S. defense contractors to the Pentagon for a "threat briefing." BusinessWeek has learned the U.S. government has launched a classified operation called Byzantine Foothold to detect, track, and disarm intrusions on the government's most critical networks. And President George W. Bush on Jan. 8 quietly signed an order known as the Cyber Initiative to overhaul U.S. cyber defenses, at an eventual cost in the tens of billions of dollars, and establishing 12 distinct goals, according to people briefed on its contents. One goal in particular illustrates the urgency and scope of the problem: By June all government agencies must cut the number of communication channels, or ports, through which their networks connect to the Internet from more than 4,000 to fewer than 100. On Apr. 8, Homeland Security Dept. Secretary Michael Chertoff called the President's order a cyber security "Manhattan Project."</blockquote>

<p>It can only help for the U.S. government to get its own cybersecurity house in order.</p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/schneier/fulltext?a=QqSfYG"><img src="http://feeds.feedburner.com/~f/schneier/fulltext?i=QqSfYG" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/schneier/fulltext?a=FNbY8G"><img src="http://feeds.feedburner.com/~f/schneier/fulltext?i=FNbY8G" border="0"></img></a>
</div>]]></content:encoded>
      <pubDate>Mon, 28 Apr 2008 02:45:35 +0000</pubDate>
      <category domain="http://securityratty.com/tag/government agencies">government agencies</category>
      <category domain="http://securityratty.com/tag/government">government</category>
      <category domain="http://securityratty.com/tag/president">president</category>
      <category domain="http://securityratty.com/tag/homeland security dept">homeland security dept</category>
      <category domain="http://securityratty.com/tag/chinese cyber espionage">chinese cyber espionage</category>
      <category domain="http://securityratty.com/tag/secretary michael chertoff">secretary michael chertoff</category>
      <category domain="http://securityratty.com/tag/president george">president george</category>
      <category domain="http://securityratty.com/tag/critical networks">critical networks</category>
      <category domain="http://securityratty.com/tag/disarm intrusions">disarm intrusions</category>
      <source url="http://www.schneier.com/blog/archives/2008/04/cyber_espionage.html">Cyber Espionage</source>
    </item>
    <item>
      <title><![CDATA["Crawling" Toward SDL]]></title>
      <link>http://securityratty.com/article/6340a9b5d612b714ea8fad65d3999ed0</link>
      <guid>http://securityratty.com/article/6340a9b5d612b714ea8fad65d3999ed0</guid>
      <description><![CDATA[Hey everyone, Jeremy Dallman here

One of the phrases I often hear during vision and strategy planning meetings at Microsoft is &quot;What is the crawl, walk, run?&quot; We use this phrase to differentiate the...]]></description>
      <content:encoded><![CDATA[<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri>Hey everyone, Jeremy Dallman here. <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri>One of the phrases I often hear during vision and strategy planning meetings at Microsoft is "What is the crawl, walk, run?" We use this phrase to differentiate the initial activities that will get us quickly moving toward our larger goals and then supplement them with other activities that may require longer preparation or planning. As I help non-Microsoft companies implement SDL into their development lifecycles, this "crawl" phase toward full adoption of SDL is very important. Usually some person in an organization picks up on the principles of SDL and is ready to roll them out immediately. However, that person usually is faced with competing interests that complicate full adoption: the team is mid-stream in development, short on budget, or management wants to see clear evidence before investing in the changes to support full SDL adoption. <o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri>Since we usually focus on how to roll out the full Lifecycle, I want to take a shot at defining what it means to start “crawling” toward SDL. One very important note before I start. What I describe below is not Microsoft’s SDL process. It matches some of the tools and principles, but does not encompass the holistic application security solution provided by SDL. <o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri>&nbsp;<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri>In my mind, to start crawling toward SDL, you need to execute on some of the core principles. They obviously need to be low-cost and effective. So, I want to summarize these into three components. <o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri>&nbsp;<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo2" class=MsoListParagraph><SPAN style="mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri"><SPAN style="mso-list: Ignore"><FONT size=3 face=Calibri>1.</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT size=3 face=Calibri>Detailed awareness of your architecture and its </FONT><A href="http://msdn2.microsoft.com/en-us/magazine/cc163882.aspx" mce_href="http://msdn2.microsoft.com/en-us/magazine/cc163882.aspx"><FONT size=3 face=Calibri>attack surface</FONT></A><FONT size=3><FONT face=Calibri>.<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo2" class=MsoListParagraph><SPAN style="mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri"><SPAN style="mso-list: Ignore"><FONT size=3 face=Calibri>2.</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT size=3><FONT face=Calibri>Tools that will perform security analysis on your application.<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo2" class=MsoListParagraph><SPAN style="mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri"><SPAN style="mso-list: Ignore"><FONT size=3 face=Calibri>3.</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT size=3><FONT face=Calibri>Results that show how the analysis resulted in improved security.<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri>&nbsp;<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri>The good news is that you can attain these components with tools that are already available. The one consistent minimum requirement is that your code compiles/builds within Visual Studio 2005 SP1. The SP1 piece of this is important because some of the important defenses I discuss below were first made available in that version. Let’s look at some of the tools you can use to get “crawling” toward SDL today:<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri>&nbsp;<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><B style="mso-bidi-font-weight: normal"><SPAN style="FONT-SIZE: 14pt; COLOR: #365f91; mso-themecolor: accent1; mso-themeshade: 191"><FONT face=Calibri>Detailed awareness of your architecture and its attack surface<o:p></o:p></FONT></SPAN></B></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><A href="http://msdn.microsoft.com/msdnmag/issues/06/11/ThreatModeling/default.aspx" mce_href="http://msdn.microsoft.com/msdnmag/issues/06/11/ThreatModeling/default.aspx"><FONT color=#0000ff size=3 face=Calibri>Threat Modeling</FONT></A><o:p></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri>Even if you are past the design phase, assign someone to do a retrospective model (perhaps as part of a pre-release review). This will likely give you a better understanding of your overall architecture and uncover holes in places you may have inadvertently overlooked. <o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri>&nbsp;<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><B style="mso-bidi-font-weight: normal"><SPAN style="FONT-SIZE: 14pt; COLOR: #365f91; mso-themecolor: accent1; mso-themeshade: 191"><FONT face=Calibri>Tools that will perform security analysis on your application<o:p></o:p></FONT></SPAN></B></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri>This is probably one of the most often discussed topics around SDL, so I’ll spend some time providing more detail. Let’s break this down into how it impacts differing parts of your team or organization: developers, testers, and operation. <o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri><B style="mso-bidi-font-weight: normal">Developers</B></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri>You should start by strengthening your compiler defenses. Depending on whether you are writing native or managed code, these will differ. <o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri>For C and C++ code:<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><I style="mso-bidi-font-style: normal"><U><FONT size=3><FONT face=Calibri>Strengthen your compiler defenses<o:p></o:p></FONT></FONT></U></I></P>
<P style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l4 level1 lfo3" class=MsoListParagraph><SPAN style="FONT-FAMILY: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT size=3><FONT face=Calibri>Use the latest compiler and linker because important defenses are added by the tools<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l4 level1 lfo3" class=MsoListParagraph><SPAN style="FONT-FAMILY: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT size=3><FONT face=Calibri>If using Visual C++, <SPAN style="mso-spacerun: yes">&nbsp;</SPAN>use Visual Studio 2005 SP1 or later<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l4 level1 lfo3" class=MsoListParagraph><SPAN style="FONT-FAMILY: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT size=3><FONT face=Calibri>Compile with appropriate compiler flags<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l4 level1 lfo3" class=MsoListParagraph><SPAN style="FONT-FAMILY: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT size=3><FONT face=Calibri>Compile clean at the highest possible warning level<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l4 level1 lfo3" class=MsoListParagraph><SPAN style="FONT-FAMILY: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT size=3><FONT face=Calibri>Compile with –GS to detect stack-based buffer overruns<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l4 level1 lfo3" class=MsoListParagraph><SPAN style="FONT-FAMILY: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT size=3><FONT face=Calibri>Link with appropriate linker flags: /NXCompat to get NX defenses, /DynamicBase to get ASLR,<SPAN style="mso-spacerun: yes">&nbsp; </SPAN>and /SafeSEH to get exception handler protections<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><I style="mso-bidi-font-style: normal"><U><FONT size=3><FONT face=Calibri>Do not use banned APIs in new code<o:p></o:p></FONT></FONT></U></I></P>
<P style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l1 level1 lfo4" class=MsoListParagraph><SPAN style="FONT-FAMILY: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT size=3 face=Calibri>Use #include “banned.h” header file to find banned C/C++ functions in your code quickly. This header file is included in the companion disk in the </FONT><A href="http://www.microsoft.com/mspress/books/8753.aspx" mce_href="http://www.microsoft.com/mspress/books/8753.aspx"><FONT size=3 face=Calibri>Security Development Lifecycle book</FONT></A><FONT size=3><FONT face=Calibri>.<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l1 level1 lfo4" class=MsoListParagraph><SPAN style="FONT-FAMILY: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT size=3><FONT face=Calibri>Compile regularly with /W4 and fix all C4996 (banned C Runtime function) warnings<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri>For all Languages:<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><I style="mso-bidi-font-style: normal"><U><FONT size=3><FONT face=Calibri>Strengthen your compiler defenses<o:p></o:p></FONT></FONT></U></I></P>
<P style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l2 level1 lfo5" class=MsoListParagraph><SPAN style="FONT-FAMILY: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT size=3><FONT face=Calibri>Use the latest compiler, linker and libraries because defenses are added by the tools and code<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt 1in; TEXT-INDENT: -0.25in; mso-list: l2 level2 lfo5" class=MsoListParagraph><SPAN style="FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Courier New'"><SPAN style="mso-list: Ignore"><FONT size=3>o</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT size=3><FONT face=Calibri>If using C#, use&nbsp; C# v2.0 or later and if using VB.Net use 8.0 or later<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l2 level1 lfo5" class=MsoListParagraph><SPAN style="FONT-FAMILY: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT size=3><FONT face=Calibri>Use .NET Framework 2.0 or later<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l2 level1 lfo5" class=MsoListParagraph><SPAN style="FONT-FAMILY: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT size=3><FONT face=Calibri>Do not use weak crypto in new code<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt 1in; TEXT-INDENT: -0.25in; mso-list: l2 level2 lfo5" class=MsoListParagraph><SPAN style="FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Courier New'"><SPAN style="mso-list: Ignore"><FONT size=3>o</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT size=3><FONT face=Calibri>Use only AES, RSA and SHA-256 (or better)<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l2 level1 lfo5" class=MsoListParagraph><SPAN style="FONT-FAMILY: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT size=3 face=Calibri>Prevent XSS vulnerabilities by using </FONT><A href="http://msdn2.microsoft.com/en-us/security/aa973814.aspx" mce_href="http://msdn2.microsoft.com/en-us/security/aa973814.aspx"><FONT color=#0000ff size=3 face=Calibri>filtering and escaping</FONT></A><FONT size=3><FONT face=Calibri> libraries around all Web output<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l2 level1 lfo5" class=MsoListParagraph><SPAN style="FONT-FAMILY: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT size=3 face=Calibri>Secure your SQL script by only using </FONT><A href="http://msdn2.microsoft.com/en-us/library/system.data.sqlclient.sqlparameter.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/system.data.sqlclient.sqlparameter.aspx"><FONT color=#0000ff size=3 face=Calibri>prepared SQL statements</FONT></A><FONT size=3><FONT face=Calibri> - no string concatenation or string replacement<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><I style="mso-bidi-font-style: normal"><U><FONT size=3><FONT face=Calibri>Run these tools habitually<o:p></o:p></FONT></FONT></U></I></P>
<P style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l6 level1 lfo1" class=MsoListParagraph><SPAN style="FONT-FAMILY: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"><SPAN style="mso-list: Ignore"><FONT size=3>·</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><A href="http://msdn2.microsoft.com/en-us/library/ms933794.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms933794.aspx"><FONT color=#0000ff size=3 face=Calibri>PREfast</FONT></A><FONT size=3><FONT face=Calibri> (in Visual Studio 2005, use the /analyze compiler option) – a static analysis tool that identifies defects in C/C++ programs and enables you to perform quick desktop error detection on small code bases<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in" class=MsoListParagraph><SPAN style="FONT-FAMILY: Symbol"><FONT size=3>·</FONT></SPAN><SPAN style="FONT-SIZE: 7pt; FONT-FAMILY: 'Times New Roman','serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><A href="http://msdn2.microsoft.com/en-us/library/bb429476(vs.80).aspx" mce_href="http://msdn2.microsoft.com/en-us/library/bb429476(vs.80).aspx"><FONT color=#0000ff size=3 face=Calibri>FxCop</FONT></A><FONT size=3><FONT face=Calibri> – an application that analyzes managed code assemblies (code that targets the .NET Framework common language runtime) and reports information about the assemblies<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in" class=MsoListParagraph><SPAN style="FONT-FAMILY: Symbol"><FONT size=3>·</FONT></SPAN><SPAN style="FONT-SIZE: 7pt; FONT-FAMILY: 'Times New Roman','serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><A href="http://msdn2.microsoft.com/en-us/library/aa480483.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/aa480483.aspx"><FONT color=#0000ff size=3 face=Calibri>Application Verifier</FONT></A><FONT size=3><FONT face=Calibri> (AppVerif) – detect and help debug memory corruptions, critical security vulnerabilities, and limited user account privilege issues.<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><B style="mso-bidi-font-weight: normal"><FONT size=3><FONT face=Calibri>Testers</FONT></FONT></B></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3 face=Calibri>James Whittaker has covered </FONT><A href="http://blogs.msdn.com/sdl/archive/2007/05/24/testing-in-the-sdl.aspx" mce_href="http://blogs.msdn.com/sdl/archive/2007/05/24/testing-in-the-sdl.aspx"><FONT size=3 face=Calibri>testing in the SDL</FONT></A><FONT size=3 face=Calibri> on this blog in the past. In a “crawl” scenario, you need to keep it simple while maximizing the value of output. I would recommend focusing on fuzz testing. This is likely something you will need to invest some time creating.<SPAN style="mso-spacerun: yes">&nbsp; </SPAN>Scott Lambert’s article on </FONT><A href="http://blogs.msdn.com/sdl/archive/2007/09/20/fuzz-testing-at-microsoft-and-the-triage-process.aspx" mce_href="http://blogs.msdn.com/sdl/archive/2007/09/20/fuzz-testing-at-microsoft-and-the-triage-process.aspx"><FONT color=#0000ff size=3 face=Calibri>Fuzz Testing at Microsoft and the Triage Process</FONT></A><FONT size=3><FONT face=Calibri> provides some good guidance on how to think through what type(s) of fuzzing to exercise against your application. <o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3 face=Calibri>If you choose to expand beyond fuzz testing, I would point you back to James’ article on the broader topic of </FONT><A href="http://blogs.msdn.com/sdl/archive/2007/05/24/testing-in-the-sdl.aspx" mce_href="http://blogs.msdn.com/sdl/archive/2007/05/24/testing-in-the-sdl.aspx"><FONT size=3 face=Calibri>Testing in SDL</FONT></A><FONT size=3><FONT face=Calibri>. You may come to the conclusion that expanded security testing<SPAN style="mso-spacerun: yes">&nbsp; </SPAN>may come later in your “walk” or “run” phases, but I would take some time to think through testing even while “crawling” to ensure you are getting broad enough coverage for your application. James’ article highlights the three-pronged approach to security testing we use at Microsoft. You should use these three approaches to ensure your own fuzz testing is comprehensive. <o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri><SPAN style="mso-spacerun: yes">&nbsp;</SPAN><o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l3 level1 lfo6" class=MsoListParagraph><SPAN style="mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri"><SPAN style="mso-list: Ignore"><FONT size=3 face=Calibri>1.</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT size=3><FONT face=Calibri>Attacks against the application’s environment.<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l3 level1 lfo6" class=MsoListParagraph><SPAN style="mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri"><SPAN style="mso-list: Ignore"><FONT size=3 face=Calibri>2.</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT size=3><FONT face=Calibri>Direct attacks against the application itself.<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l3 level1 lfo6" class=MsoListParagraph><SPAN style="mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri"><SPAN style="mso-list: Ignore"><FONT size=3 face=Calibri>3.</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT size=3><FONT face=Calibri>Indirect attacks against the application’s functionality.<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><SPAN style="BACKGROUND: silver; mso-highlight: silver"><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></SPAN></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><B style="mso-bidi-font-weight: normal"><SPAN style="FONT-SIZE: 14pt; COLOR: #365f91; mso-themecolor: accent1; mso-themeshade: 191"><FONT face=Calibri>Results that show how the analysis resulted in improved security<o:p></o:p></FONT></SPAN></B></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri><B style="mso-bidi-font-weight: normal">Response planning</B></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3 face=Calibri>Protecting your customers is the entire reason for focusing energy on application security.<SPAN style="mso-spacerun: yes">&nbsp; </SPAN>If there are holes in your code that you don’t uncover, someone else will. It is absolutely critical that you are prepared to respond rapidly and protect your customers. It is equally important that you construct your<SPAN style="mso-spacerun: yes">&nbsp; </SPAN>response plan to serve as a front-line barometer for detecting the resilience of your security design<SPAN style="mso-spacerun: yes">&nbsp; </SPAN>and what pieces of your applications security should be proactively bolstered to<SPAN style="mso-spacerun: yes">&nbsp; </SPAN>address externally reported vulnerabilities. <SPAN style="mso-spacerun: yes">&nbsp;</SPAN>The knowledge you harvest from these security incidents (typically through root cause analysis) is the primary way to improve your code and security tooling for the future.<SPAN style="mso-spacerun: yes">&nbsp; </SPAN>Do everything you can to learn lessons from the vulnerabilities others find. If you don’t have a response plan in place, you need to get one in place as soon as possible. If you don’t know where to start, take a look at how our own </FONT><A href="http://www.microsoft.com/security/msrc/incident_response.mspx" mce_href="http://www.microsoft.com/security/msrc/incident_response.mspx"><FONT size=3 face=Calibri>Microsoft Security Response Center</FONT></A><FONT size=3 face=Calibri> does it and fit to your scale or pick up the </FONT><A href="http://www.microsoft.com/mspress/books/8753.aspx" mce_href="http://www.microsoft.com/mspress/books/8753.aspx"><FONT size=3 face=Calibri>Security Development Lifecycle book</FONT></A><FONT size=3><FONT face=Calibri> and dig into the four-step process outlined.<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt 0.25in" class=MsoNormal><FONT size=3><FONT face=Calibri>The four steps of the emergency response process:<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt 0.75in; TEXT-INDENT: -0.25in; mso-list: l5 level1 lfo7" class=MsoListParagraph><SPAN style="mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri"><SPAN style="mso-list: Ignore"><FONT size=3 face=Calibri>1.</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT size=3><FONT face=Calibri>Watch<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt 0.75in; TEXT-INDENT: -0.25in; mso-list: l5 level1 lfo7" class=MsoListParagraph><SPAN style="mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri"><SPAN style="mso-list: Ignore"><FONT size=3 face=Calibri>2.</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT size=3><FONT face=Calibri>Alert and Mobilize<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt 0.75in; TEXT-INDENT: -0.25in; mso-list: l5 level1 lfo7" class=MsoListParagraph><SPAN style="mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri"><SPAN style="mso-list: Ignore"><FONT size=3 face=Calibri>3.</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT size=3><FONT face=Calibri>Assess and Stabilize<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt 0.75in; TEXT-INDENT: -0.25in; mso-list: l5 level1 lfo7" class=MsoListParagraph><SPAN style="mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri"><SPAN style="mso-list: Ignore"><FONT size=3 face=Calibri>4.</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><FONT size=3><FONT face=Calibri>Resolve<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri><B style="mso-bidi-font-weight: normal">Bugs, Bugs, Bugs</B></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri>Gathering evidence that clearly shows your work has improved the security of your application is always a challenge. Trying to keep it lightweight adds to that challenge. The most effective way to create traceable and practical evidence without a lot of overhead is detailed management of security issues in your bug database.<SPAN style="mso-spacerun: yes">&nbsp; </SPAN>The key here is that your bug database is configurable and able to be queried in a variety of ways to pull out this data. From the time you set out to implement this plan, be strict in tracking every discovery from threat modeling, the mitigations to those threats, and every bug you expose in tool analysis. This library of security bugs will give you an easy way to go back and gather evidence that shows the quantity of issues you discovered, the mitigations you used, and the impact the changes had on your application.<o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri>I have provided a fairly detailed view of these components. As I indicated, many of these defenses are available for you in Visual Studio 2005 SP1 or various linked resources above. If you are unsure whether you are taking advantage of all available defenses in your development tools, take the time to check. <o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri>It is my hope that some of you can use this scaled back entry into the principles of SDL to get moving toward improved security assurance. In the non-Microsoft SDL engagements I have been involved in, we have seen these steps&nbsp;effectively establish a baseline architectural understanding of your application security and identify critical weaknesses while providing solid evidence to support the decision to “run” forward into full SDL adoption. <o:p></o:p></FONT></FONT></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><o:p><FONT size=3 face=Calibri>&nbsp;</FONT></o:p></P>
<P style="MARGIN: 0in 0in 0pt" class=MsoNormal><FONT size=3><FONT face=Calibri>[I want to thank Michael Howard for providing some of the key data for the Developer pieces in&nbsp;this article.]<o:p></o:p></FONT></FONT></P><img src="http://blogs.msdn.com/aggbug.aspx?PostID=8081069" width="1" height="1">]]></content:encoded>
      <pubDate>Thu, 06 Mar 2008 19:13:00 +0000</pubDate>
      <category domain="http://securityratty.com/tag/sdl">sdl</category>
      <category domain="http://securityratty.com/tag/security">security</category>
      <category domain="http://securityratty.com/tag/perform security analysis">perform security analysis</category>
      <category domain="http://securityratty.com/tag/application security">application security</category>
      <category domain="http://securityratty.com/tag/application">application</category>
      <category domain="http://securityratty.com/tag/applications security">applications security</category>
      <category domain="http://securityratty.com/tag/security issues">security issues</category>
      <category domain="http://securityratty.com/tag/issues">issues</category>
      <category domain="http://securityratty.com/tag/non-microsoft sdl engagements">non-microsoft sdl engagements</category>
      <source url="http://blogs.msdn.com/sdl/archive/2008/03/06/crawling-toward-sdl.aspx">"Crawling" Toward 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>
