<?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: tweak]]></title>
    <link>http://securityratty.com/tag/tweak</link>
    <description></description>
    <pubDate>Mon, 18 Feb 2008 21:24:05 +0000</pubDate>
    <generator>iRatty Engine</generator>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <item>
      <title><![CDATA[Even More Logging Questions - Answered]]></title>
      <link>http://securityratty.com/article/42419cabc2c6779620c8b8bb44fe54c9</link>
      <guid>http://securityratty.com/article/42419cabc2c6779620c8b8bb44fe54c9</guid>
      <description><![CDATA[I did this fun webcast on logging for accountability ( here ) and people asked a lot of good questions. Here are some of the answers for them and all my blog readers

Q1: How do you handle variety of...]]></description>
      <content:encoded><![CDATA[<p>I did <a href="http://isc2.brighttalk.com/node/403">this fun webcast</a> on logging for accountability (<a href="http://isc2.brighttalk.com/node/403">here</a>) and people asked a lot of good questions. Here are some of the answers for them and all my blog readers.</p>  <p>&#160;</p>  <p>Q1: How do you handle variety of log sources? There are so many, almost beyond my capability. </p>  <p>A1: Sorry to ponder the meaning of &quot;is&quot; here, but what is meant by &quot;handle&quot;? It is really not that hard to collect logs from a large number of diverse sources (as long as the logs can be delivered via syslog or exist as files and can be collected). Now, there will certainly be challenges&#160; when the volume of logs gets large, but if by &quot;handle&quot; you mean &quot;collect + store&quot;, it is really not that hard, given <a href="http://www.loglogic.com">the right tools.</a> Now, if &quot;handle&quot; means &quot;make sense of what all those logs are trying to tell you,&quot; it is a different story altogether.</p>  <p>&#160;</p>  <p>Q2: You talked about the importance of logging; however for an intermediate or novice admin what are the starting steps .. what are the minimal logs they should start at once?</p>  <p>A2: Answered in <a href="http://chuvakin.blogspot.com/2008/07/log-management-day-1.html">&quot;Log Management - Day 1&quot;</a> If you want a simple list of things to &quot;enable today,&quot;&#160; I cannot really answer it since I know neither your needs, nor your environment. In other words, this is the &quot;what is the meaning of life question?&quot; :-)</p>  <p>&#160;</p>  <p>Q3: What regulations, rules or guidance exist regarding sharing or visibility of logs to users?</p>  <p>A3: PCI DSS says in Requirement 10.5:&#160; &quot;Secure audit trails so they cannot be altered.    <br /><em>10.5.1 Limit viewing of audit trails to those with a job-related need      <br /></em>10.5.2 Protect audit trail files from unauthorized modifications     <br />10.5.3 Promptly back-up audit trail files to a centralized log server or media that is difficult to     <br />alter&quot; </p>  <p>NIST guidance for FISMA also says something similar (for example, look in <a href="http://csrc.nist.gov/publications/nistpubs/800-92/SP800-92.pdf">NIST 800-92 doc</a>). Overall, <a href="http://chuvakin.blogspot.com/2007/10/top-11-reasons-to-secure-and-protect.html">log protection and security</a> are mentioned in many other regulations as well. </p>  <p>&#160;</p>  <p>Q4: Privileged groups membership monitoring in AD one of the most important from my point of view. However I did not find effective way to monitor/report on changes in those groups. Any recommendations?</p>  <p>A4: This is indeed a tricky one which might take more space to answer than I have here; it might also take you 'beyond logs.' One good source of information is <a href="http://www.ultimatewindowssecurity.com/encyclopedia.aspx">Randy Smith's site</a> and, specifically, his webinar on 'Active Directory &quot;Logging Gap&quot;' (<a href="http://www.ultimatewindowssecurity.com/aaad/">here somewhere</a>) - which covers how to audit things of that sort when then native logging is not sufficient.</p>  <p>&#160;</p>  <p>Q5: How I can learn what exactly I need to log?</p>  <p>A5: OMG, this is a $1,000,000 question :-) Let me answer &quot;how can I learn&quot; part and not the &quot;what exactly I need to log part,&quot;&#160; (also see discussion on &quot;<a href="http://chuvakin.blogspot.com/2008/02/must-do-logging-for-pci.html">MUST-DO Logging for PCI?</a>&quot;) as it is actually answerable. To learn what you need to log, first ask &quot;Why?&quot; (and then see <a href="http://chuvakin.blogspot.com/2008/07/log-management-day-1.html">this</a>) - basically establish what you want to accomplish with logs, catalogue your systems, figure how to tweak the logging knobs - and then do it!</p>  <p>&#160;</p>  <p>Q6: How granular should logging be? What is your recommendation for enterprise servers like domain servers and Windows servers?</p>  <p>A6: Again, too long to answer here in details (it will become a subject of a longer blog post later), but some pointers follow: <a href="http://www.ultimatewindowssecurity.com/blog/blog_commento.asp?blog_id=23&amp;month=05&amp;year=2007&amp;giorno=&amp;archivio=OK">here for Windows</a> (MS site also have a few recommendations on audit policies)</p>  <p>&#160; </p>  <p>Q7: What is &quot;more control&quot; and what is &quot;less control&quot; that you <a href="http://isc2.brighttalk.com/node/403">mention in the webcast</a>? Can you give an example?</p>  <p>A7: OK, I did say that &quot;sometimes when you implement more controls, you actually have less control.&quot; What do I mean? If you buy a firewall (a network security control) and then - over time, of course - configure it with 7800 rules (!) that are supposed to give you control over who can and cannot access your network, you will not gain control over your environment. You will actually be less in control of who is touching your network, compared to, say, having only 20 rules.</p>  <p>&#160;</p>  <p>Q8: What about mandated NIST controls for government systems? Auditing is a specific control for Moderate and High risk systems. What list of events do you recommend for auditing?</p>  <p>A8: This is too long to answer here, but <a href="http://csrc.nist.gov/publications/nistpubs/800-92/SP800-92.pdf ">NIST 800-92 Guide</a> is a really good source of such info (&quot;<a href="http://csrc.nist.gov/publications/nistpubs/800-92/SP800-92.pdf">Guide to Computer Security Log Management [PDF]</a>&quot;) Also, see my presentation on <a href="http://www.slideshare.net/anton_chuvakin/nist-80092-log-management-guide-in-the-real-world/">NIST 800-92 Guide in the Real World</a>.</p>  <p>&#160;</p>  <p>Q9: The issue that many organizations get stuck on, is the monitoring process, and defining what exceptions to monitor for? Is there guidance / framework for this? How much of it is system specific and how much is applicable generally to all systems?</p>  <p>A9: I outlined some general ideas <a href="http://www.slideshare.net/anton_chuvakin/what-every-organization-should-log-and-monitor">back in 2004 via this presentation</a>&#160;<em>(note to self - update that to be more 2008-relevant);</em> it is mostly general, but also has pointers to specific system. Keep in mind that it is focused on security, not operational monitoring (which is often no less important - in fact, often <a href="http://rationalsecurity.typepad.com/blog/2008/02/omg-availabilit.html">MORE important</a>)</p>  <p>&#160;</p>  <p>Enjoy! Sorry for being brief with some of the answers - I am woefully late with this even as they are...</p>  <p><strong>Other questions that I answered in the past:</strong></p>  <ul>   <li><a href="http://chuvakin.blogspot.com/2008/05/more-log-management-questions-answered.html">More Log Management Questions - Answered!</a> </li>    <li><a href="http://chuvakin.blogspot.com/2008/04/some-burning-logging-questions-answered.html">Some Burning Logging Questions - Answered!</a> </li> </ul>  <div class="blogger-post-footer">About me: http://www.chuvakin.org</div><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/AntonChuvakinPersonalBlog?a=juyDeK"><img src="http://feeds.feedburner.com/~f/AntonChuvakinPersonalBlog?i=juyDeK" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/AntonChuvakinPersonalBlog?a=o5WeXK"><img src="http://feeds.feedburner.com/~f/AntonChuvakinPersonalBlog?i=o5WeXK" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/AntonChuvakinPersonalBlog?a=mnNGqK"><img src="http://feeds.feedburner.com/~f/AntonChuvakinPersonalBlog?i=mnNGqK" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/AntonChuvakinPersonalBlog/~4/357664119" height="1" width="1"/>]]></content:encoded>
      <pubDate>Wed, 06 Aug 2008 07:43:00 +0000</pubDate>
      <category domain="http://securityratty.com/tag/log server">log server</category>
      <category domain="http://securityratty.com/tag/log">log</category>
      <category domain="http://securityratty.com/tag/log sources">log sources</category>
      <category domain="http://securityratty.com/tag/log management">log management</category>
      <category domain="http://securityratty.com/tag/control">control</category>
      <category domain="http://securityratty.com/tag/questions">questions</category>
      <category domain="http://securityratty.com/tag/specific control">specific control</category>
      <category domain="http://securityratty.com/tag/network security control">network security control</category>
      <category domain="http://securityratty.com/tag/log protection">log protection</category>
      <source url="http://feeds.feedburner.com/~r/AntonChuvakinPersonalBlog/~3/357664119/even-more-logging-questions-answered.html">Even More Logging Questions - Answered</source>
    </item>
    <item>
      <title><![CDATA[Better exception reporting in ASP.NET part 2]]></title>
      <link>http://securityratty.com/article/b878f7921917b371086606df6d043229</link>
      <guid>http://securityratty.com/article/b878f7921917b371086606df6d043229</guid>
      <description><![CDATA[This is the third post in a series
The first post described the problem: ASP.NET wasn't reporting inner exception stack traces
The second post described my solution
This post shows the code I used to...]]></description>
      <content:encoded><![CDATA[<p>This is the third post in a series.</p> <p>The <a href="http://www.pluralsight.com/community/blogs/keith/archive/2008/08/01/asp-net-health-monitoring-doesn-t-log-inner-exception-stack-trace.aspx" target="_blank">first post</a> described the problem: ASP.NET wasn&#39;t reporting inner exception stack traces.</p> <p>The <a href="http://www.pluralsight.com/community/blogs/keith/archive/2008/08/01/better-exception-reporting-in-asp-net.aspx" target="_blank">second post</a> described my solution.</p> <p>This post shows the code I used to solve the problem: a custom email provider for the Health Monitoring system in ASP.NET. Enjoy!</p> <p>Here&#39;s the provider. Note that I opted *not* to build a buffering provider to keep things simple:</p><pre class="csharpcode"><span class="kwrd">public</span> <span class="kwrd">class</span> MyMailWebEventProvider : WebEventProvider
{
    <span class="kwrd">string</span> to;
    <span class="kwrd">string</span> from;
    <span class="kwrd">string</span> subjectPrefix;

    <span class="kwrd">public</span> <span class="kwrd">override</span> <span class="kwrd">void</span> Initialize(<span class="kwrd">string</span> name,
        NameValueCollection config)
    {
        <span class="kwrd">base</span>.Initialize(name, config);

        to = GetAndRemoveStringAttribute(config, <span class="str">&quot;to&quot;</span>, <span class="kwrd">true</span>);
        from = GetAndRemoveStringAttribute(config, <span class="str">&quot;from&quot;</span>, <span class="kwrd">true</span>);
        subjectPrefix = GetAndRemoveStringAttribute(config,
            <span class="str">&quot;subjectPrefix&quot;</span>, <span class="kwrd">false</span>);
    }
    <span class="kwrd">public</span> <span class="kwrd">override</span> <span class="kwrd">void</span> ProcessEvent(WebBaseEvent raisedEvent)
    {
        SendMail(raisedEvent);
    }

    <span class="kwrd">private</span> <span class="kwrd">void</span> SendMail(WebBaseEvent raisedEvent)
    {
        <span class="kwrd">string</span> subject = ComputeEmailSubject(raisedEvent);
        <span class="kwrd">string</span> body = ComputeEmailBody(raisedEvent);

        MailMessage msg = <span class="kwrd">new</span> MailMessage(from, to, subject, body);
        <span class="kwrd">new</span> SmtpClient().Send(msg);
    }

    <span class="kwrd">private</span> <span class="kwrd">string</span> ComputeEmailBody(WebBaseEvent raisedEvent)
    {
        WebRequestErrorEvent errorEvent =
            raisedEvent <span class="kwrd">as</span> WebRequestErrorEvent;
        <span class="kwrd">if</span> (<span class="kwrd">null</span> != errorEvent)
            <span class="kwrd">return</span> ErrorEventFormattingHelper.FormatRequestErrorEvent(errorEvent);
        <span class="kwrd">else</span> <span class="kwrd">return</span> raisedEvent.ToString();
    }

    <span class="kwrd">private</span> <span class="kwrd">string</span> ComputeEmailSubject(WebBaseEvent raisedEvent)
    {
        StringBuilder subjectBuilder = <span class="kwrd">new</span> StringBuilder();

        <span class="rem">// surface some details in subject about error events</span>
        WebBaseErrorEvent errorEvent = raisedEvent <span class="kwrd">as</span> WebBaseErrorEvent;
        <span class="kwrd">if</span> (<span class="kwrd">null</span> != errorEvent)
        {
            Exception unhandledException = errorEvent.ErrorException;

            <span class="rem">// drill through reflection exceptions to show the root cause</span>
            TargetInvocationException invocationException =
                unhandledException <span class="kwrd">as</span> TargetInvocationException;
            <span class="kwrd">if</span> (<span class="kwrd">null</span> != invocationException)
            {
                Exception innerException =
                    DrillIntoTargetInvocationException(invocationException);
                subjectBuilder.AppendFormat(<span class="str">&quot;{0}&quot;</span>,
                    (innerException ?? invocationException).GetType().Name);
                <span class="kwrd">if</span> (<span class="kwrd">null</span> != innerException)
                    subjectBuilder.Append(<span class="str">&quot; (via reflection)&quot;</span>);
            }
            <span class="kwrd">else</span> subjectBuilder.Append(unhandledException.GetType().Name);
        }

        <span class="rem">// if we&#39;ve not got anything better</span>
        <span class="rem">// just show the event type in the subject</span>
        <span class="kwrd">if</span> (0 == subjectBuilder.Length)
            subjectBuilder.AppendFormat(<span class="str">&quot;Event type: {0}&quot;</span>,
                raisedEvent.GetType().Name);

        <span class="kwrd">if</span> (!<span class="kwrd">string</span>.IsNullOrEmpty(subjectPrefix)) {
            subjectBuilder.Insert(0, <span class="str">&#39; &#39;</span>);
            subjectBuilder.Insert(0, subjectPrefix);
        }
        <span class="kwrd">return</span> subjectBuilder.ToString();
    }

    <span class="rem">/// &lt;summary&gt;</span>
    <span class="rem">/// Reflection often hides exception details, so we try to drill down</span>
    <span class="rem">/// through the plumbing exceptions to find a likely cause</span>
    <span class="rem">/// &lt;/summary&gt;</span>
    <span class="kwrd">private</span> Exception DrillIntoTargetInvocationException(
        TargetInvocationException outerException)
    {
        Exception innerException = outerException.InnerException;
        TargetInvocationException innerInvocationException =
            innerException <span class="kwrd">as</span> TargetInvocationException;
        <span class="kwrd">if</span> (<span class="kwrd">null</span> != innerInvocationException)
            <span class="kwrd">return</span> DrillIntoTargetInvocationException(innerInvocationException);
        <span class="kwrd">else</span> <span class="kwrd">if</span> (<span class="kwrd">null</span> != innerException)
            <span class="kwrd">return</span> innerException;
        <span class="kwrd">else</span> <span class="kwrd">return</span> <span class="kwrd">null</span>;
    }

    <span class="kwrd">private</span> <span class="kwrd">static</span> <span class="kwrd">string</span> GetAndRemoveStringAttribute(NameValueCollection config,
        <span class="kwrd">string</span> attributeName, <span class="kwrd">bool</span> required)
    {
        <span class="kwrd">string</span> <span class="kwrd">value</span> = config.Get(attributeName);
        <span class="kwrd">if</span> (required &amp;&amp; <span class="kwrd">string</span>.IsNullOrEmpty(<span class="kwrd">value</span>))
            <span class="kwrd">throw</span> <span class="kwrd">new</span> ConfigurationErrorsException(<span class="kwrd">string</span>.Format(
                <span class="str">&quot;Expected attribute {0}, which is missing or empty.&quot;</span>,
                attributeName));
        config.Remove(attributeName);
        <span class="kwrd">return</span> <span class="kwrd">value</span>;
    }

    <span class="kwrd">public</span> <span class="kwrd">override</span> <span class="kwrd">void</span> Flush()
    {
        <span class="rem">// nothing to do - this is not a buffering provider</span>
    }

    <span class="kwrd">public</span> <span class="kwrd">override</span> <span class="kwrd">void</span> Shutdown()
    {
        <span class="rem">// nothing to do here either</span>
    }
}</pre>
<p>Here&#39;s a helper class that formats the error messages the way I want to see them. Note that I&#39;ve omitted some fields that I personally didn&#39;t care about, and I&#39;ve reordered things a bit, so you might want to tweak this if you&#39;re going to use it in your own system.</p><pre class="csharpcode"><span class="kwrd">internal</span> <span class="kwrd">static</span> <span class="kwrd">class</span> ErrorEventFormattingHelper
{
    <span class="kwrd">internal</span> <span class="kwrd">static</span> <span class="kwrd">string</span> FormatRequestErrorEvent(
        WebRequestErrorEvent errorEvent)
    {
        CustomEventFormatter formatter = 
            <span class="kwrd">new</span> CustomEventFormatter();

        formatter.AppendLine(<span class="kwrd">string</span>.Format(
            <span class="str">&quot;Unhandled Exception in {0}:&quot;</span>,
            WebBaseEvent.ApplicationInformation
            .ApplicationVirtualPath));
        formatter.Indent();
        EmitExceptionAtAGlance(formatter, 
            errorEvent.ErrorException);
        formatter.RevertIndent();

        formatter.AppendLine();
        formatter.AppendLine(<span class="str">&quot;Exception stack trace(s):&quot;</span>);
        EmitExceptionStackTrace(formatter, 
            errorEvent.ErrorException);

        formatter.AppendLine();
        formatter.AppendLine(<span class="str">&quot;Event information:&quot;</span>);
        formatter.Indent();
        EmitEventInfo(formatter, errorEvent);
        formatter.RevertIndent();

        formatter.AppendLine();
        formatter.AppendLine(<span class="str">&quot;Application information:&quot;</span>);
        formatter.Indent();
        EmitApplicationInfo(formatter, 
            WebBaseEvent.ApplicationInformation);
        formatter.RevertIndent();

        formatter.AppendLine();
        formatter.AppendLine(<span class="str">&quot;Process/thread information:&quot;</span>);
        formatter.Indent();
        EmitProcessInfo(formatter, 
            errorEvent.ProcessInformation);
        formatter.RevertIndent();

        formatter.AppendLine();
        formatter.AppendLine(<span class="str">&quot;Request information:&quot;</span>);
        formatter.Indent();
        EmitRequestInfo(formatter, 
            errorEvent.RequestInformation);
        formatter.RevertIndent();

        <span class="kwrd">return</span> formatter.ToString();
    }

    <span class="kwrd">private</span> <span class="kwrd">static</span> <span class="kwrd">void</span> EmitEventInfo(
        CustomEventFormatter formatter,
        WebBaseEvent theEvent)
    {
        formatter.AppendLine(<span class="kwrd">string</span>.Format(
            <span class="str">&quot;Event code: {0}&quot;</span>,
            theEvent.EventCode.ToString(
            CultureInfo.InvariantCulture)));
        formatter.AppendLine(<span class="kwrd">string</span>.Format(
            <span class="str">&quot;Event message: {0}&quot;</span>, 
            theEvent.Message));
        formatter.AppendLine(<span class="kwrd">string</span>.Format(
            <span class="str">&quot;Event time: {0}&quot;</span>, 
            theEvent.EventTime.ToString(
            CultureInfo.InvariantCulture)));
        formatter.AppendLine(<span class="kwrd">string</span>.Format(
            <span class="str">&quot;Event ID: {0}&quot;</span>, 
            theEvent.EventID.ToString(<span class="str">&quot;N&quot;</span>, 
            CultureInfo.InvariantCulture)));
    }

    <span class="kwrd">private</span> <span class="kwrd">static</span> <span class="kwrd">void</span> EmitApplicationInfo(
        CustomEventFormatter formatter, 
        WebApplicationInformation appInfo)
    {
        formatter.AppendLine(<span class="kwrd">string</span>.Format(
            <span class="str">&quot;Application domain: {0}&quot;</span>, 
            appInfo.ApplicationDomain));
        formatter.AppendLine(<span class="kwrd">string</span>.Format(
            <span class="str">&quot;Application Virtual Path: {0}&quot;</span>, 
            appInfo.ApplicationVirtualPath));
        formatter.AppendLine(<span class="kwrd">string</span>.Format(
            <span class="str">&quot;Application Physical Path: {0}&quot;</span>, 
            appInfo.ApplicationPath));
    }

    <span class="kwrd">private</span> <span class="kwrd">static</span> <span class="kwrd">void</span> EmitProcessInfo(
        CustomEventFormatter formatter, 
        WebProcessInformation webProcessInfo)
    {
        formatter.AppendLine(<span class="kwrd">string</span>.Format(
            <span class="str">&quot;Process ID: {0}&quot;</span>, 
            webProcessInfo.ProcessID.ToString(
            CultureInfo.InvariantCulture)));
        formatter.AppendLine(<span class="kwrd">string</span>.Format(
            <span class="str">&quot;Process name: {0}&quot;</span>, 
            webProcessInfo.ProcessName));
        formatter.AppendLine(<span class="kwrd">string</span>.Format(
            <span class="str">&quot;Account name: {0}&quot;</span>, 
            webProcessInfo.AccountName));
    }

    <span class="kwrd">private</span> <span class="kwrd">static</span> <span class="kwrd">void</span> EmitRequestInfo(
        CustomEventFormatter formatter, 
        WebRequestInformation webRequestInfo)
    {
        <span class="kwrd">string</span> name = <span class="kwrd">null</span>;
        <span class="kwrd">if</span> (webRequestInfo.Principal != <span class="kwrd">null</span>)
            name = webRequestInfo.Principal.Identity.Name;

        formatter.AppendLine(<span class="kwrd">string</span>.Format(
            <span class="str">&quot;Request URL: {0}&quot;</span>, 
            webRequestInfo.RequestUrl));
        formatter.AppendLine(<span class="kwrd">string</span>.Format(
            <span class="str">&quot;Request path: {0}&quot;</span>, 
            webRequestInfo.RequestPath));
        formatter.AppendLine(<span class="kwrd">string</span>.Format(
            <span class="str">&quot;User name: {0}&quot;</span>, 
            name ?? <span class="str">&quot;[ANONYMOUS]&quot;</span>));
        formatter.AppendLine(<span class="kwrd">string</span>.Format(
            <span class="str">&quot;User host address: {0}&quot;</span>, 
            webRequestInfo.UserHostAddress));
    }

    <span class="kwrd">private</span> <span class="kwrd">static</span> <span class="kwrd">void</span> EmitExceptionAtAGlance(
        CustomEventFormatter formatter, 
        Exception exception)
    {
        formatter.AppendLine(<span class="kwrd">string</span>.Format(
            <span class="str">&quot;Type: {0}&quot;</span>, 
            exception.GetType().Name));
        formatter.AppendLine(<span class="kwrd">string</span>.Format(
            <span class="str">&quot;Message: {0}&quot;</span>, 
            exception.Message));
        <span class="kwrd">if</span> (<span class="kwrd">null</span> != exception.InnerException)
        {
            formatter.Indent();
            formatter.AppendLine(<span class="str">&quot;--&gt;Inner Exception&quot;</span>);
            EmitExceptionAtAGlance(formatter, 
                exception.InnerException);
            formatter.RevertIndent();
        }
    }

    <span class="kwrd">private</span> <span class="kwrd">static</span> <span class="kwrd">void</span> EmitExceptionStackTrace(
        CustomEventFormatter formatter, Exception exception)
    {
        formatter.AppendLine(exception.StackTrace);

        <span class="kwrd">if</span> (<span class="kwrd">null</span> != exception.InnerException)
        {
            <span class="rem">// no point indenting</span>
            <span class="rem">// since stack traces typically wrap like crazy</span>
            formatter.AppendLine();
            formatter.AppendLine(<span class="str">&quot;--&gt;Inner exception stack trace:&quot;</span>);
            EmitExceptionStackTrace(formatter, exception.InnerException);
        }
    }
}
</pre>
<p>And finally, here&#39;s a helper class that manages indentation levels for the output email message:</p><pre class="csharpcode"><span class="kwrd">public</span> <span class="kwrd">class</span> CustomEventFormatter
{
    <span class="kwrd">const</span> <span class="kwrd">int</span> TabSpaces = 4;

    StringBuilder sb = <span class="kwrd">new</span> StringBuilder();
    <span class="kwrd">private</span> <span class="kwrd">int</span> indentLevel;
    <span class="kwrd">private</span> <span class="kwrd">bool</span> startingNewLine = <span class="kwrd">true</span>;

    <span class="kwrd">public</span> <span class="kwrd">void</span> Indent()
    {
        ++indentLevel;
    }

    <span class="kwrd">public</span> <span class="kwrd">void</span> RevertIndent()
    {
        <span class="kwrd">if</span> (indentLevel &gt; 0)
            --indentLevel;
    }

    <span class="kwrd">public</span> <span class="kwrd">void</span> Append(<span class="kwrd">string</span> text)
    {
        <span class="kwrd">if</span> (startingNewLine)
            EmitIndent();
        sb.Append(text);
        startingNewLine = <span class="kwrd">false</span>;
    }

    <span class="kwrd">public</span> <span class="kwrd">void</span> AppendLine(<span class="kwrd">string</span> lineOfText)
    {
        <span class="kwrd">if</span> (startingNewLine)
            EmitIndent();
        EmitIndent();
        sb.AppendLine(lineOfText);
        startingNewLine = <span class="kwrd">true</span>;
    }

    <span class="kwrd">private</span> <span class="kwrd">void</span> EmitIndent()
    {
        sb.Append(<span class="str">&#39; &#39;</span>, TabSpaces * indentLevel);
    }

    <span class="kwrd">public</span> <span class="kwrd">void</span> AppendLine()
    {
        AppendLine(<span class="kwrd">string</span>.Empty);
    }

    <span class="kwrd">public</span> <span class="kwrd">override</span> <span class="kwrd">string</span> ToString()
    {
        <span class="kwrd">return</span> sb.ToString();
    }
}
</pre>
<p>Build this into a library application and reference it in your config file. Here&#39;s an example:</p><pre class="csharpcode"><span class="kwrd">&lt;</span><span class="html">healthMonitoring</span><span class="kwrd">&gt;</span>
  <span class="kwrd">&lt;</span><span class="html">providers</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">add</span> <span class="attr">name</span><span class="kwrd">=&quot;mailWebEventProvider&quot;</span>
         <span class="attr">type</span><span class="kwrd">=&quot;MyMailWebEventProvider&quot;</span>
         <span class="attr">to</span><span class="kwrd">=&quot;web-fault@fabrikam.com&quot;</span>
         <span class="attr">from</span><span class="kwrd">=&quot;website@fabrikam.com&quot;</span>
         <span class="attr">buffer</span><span class="kwrd">=&quot;false&quot;</span>
         <span class="attr">subjectPrefix</span><span class="kwrd">=&quot;[WEB-ERROR]&quot;</span>
       <span class="kwrd">/&gt;</span>
  <span class="kwrd">&lt;/</span><span class="html">providers</span><span class="kwrd">&gt;</span>
  <span class="kwrd">&lt;</span><span class="html">rules</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">add</span> <span class="attr">name</span><span class="kwrd">=&quot;All Errors Email&quot;</span>
         <span class="attr">eventName</span><span class="kwrd">=&quot;All Errors&quot;</span>
         <span class="attr">provider</span><span class="kwrd">=&quot;mailWebEventProvider&quot;</span>
         <span class="attr">profile</span><span class="kwrd">=&quot;Default&quot;</span>
         <span class="attr">minInstances</span><span class="kwrd">=&quot;1&quot;</span>
         <span class="attr">maxLimit</span><span class="kwrd">=&quot;Infinite&quot;</span>
         <span class="attr">minInterval</span><span class="kwrd">=&quot;00:01:00&quot;</span>
         <span class="attr">custom</span><span class="kwrd">=&quot;&quot;</span><span class="kwrd">/&gt;</span>
  <span class="kwrd">&lt;/</span><span class="html">rules</span><span class="kwrd">&gt;</span>
<span class="kwrd">&lt;/</span><span class="html">healthMonitoring</span><span class="kwrd">&gt;</span>
</pre><div style="clear:both;"></div><img src="http://www.pluralsight.com/community/aggbug.aspx?PostID=52349" width="1" height="1">]]></content:encoded>
      <pubDate>Mon, 04 Aug 2008 10:11:14 +0000</pubDate>
      <category domain="http://securityratty.com/tag/return">return</category>
      <category domain="http://securityratty.com/tag/return subjectbuilder">return subjectbuilder</category>
      <category domain="http://securityratty.com/tag/return formatter">return formatter</category>
      <category domain="http://securityratty.com/tag/exception">exception</category>
      <category domain="http://securityratty.com/tag/formatter">formatter</category>
      <category domain="http://securityratty.com/tag/crazy formatter">crazy formatter</category>
      <category domain="http://securityratty.com/tag/static void">static void</category>
      <category domain="http://securityratty.com/tag/static void emitprocessinfo">static void emitprocessinfo</category>
      <category domain="http://securityratty.com/tag/return null">return null</category>
      <source url="http://www.pluralsight.com/community/blogs/keith/archive/2008/08/04/better-exception-reporting-in-asp-net-part-2.aspx">Better exception reporting in ASP.NET part 2</source>
    </item>
    <item>
      <title><![CDATA[Improve Security with "A Layer of Hurt"]]></title>
      <link>http://securityratty.com/article/8863df5f439aabcb64e3fc7d0777f2bf</link>
      <guid>http://securityratty.com/article/8863df5f439aabcb64e3fc7d0777f2bf</guid>
      <description><![CDATA[Hello, Michael here
I got a lot of interesting comments from my TechEd 2008 presentation entitled, &quot;How To Review Your Code And Test For Security Bugs,&quot; but the most comments and questions were...]]></description>
      <content:encoded><![CDATA[Hello, Michael here. 
<P>I got a lot of interesting comments from my <A href="http://blogs.msdn.com/sdl/archive/2008/06/26/security-thoughts-from-teched-2008.aspx" mce_href="http://blogs.msdn.com/sdl/archive/2008/06/26/security-thoughts-from-teched-2008.aspx">TechEd 2008 presentation</A> entitled, "How To Review Your Code And Test For Security Bugs," but the most comments and questions were reserved for fuzz testing; I was blown away by the number of people who thought fuzz testing was hard, or that you only left fuzz testing to ‘leet hackers.</P>
<P>During the presentation I mentioned in some depth how to perform fuzz testing, and what parts of an application should be fuzz testing targets. I also introduced an idea (that's not new) to help people who have never performed fuzz testing begin fuzz testing with very little cost and friction. The idea is to add a small layer of code to an application to automatically mutate untrusted data as it comes into an application; I called that code layer "a layer of hurt."</P>
<P>Before I continue, I want to point out that fuzzing is an SDL requirement, but the idea in this blog post is not an SDL requirement, it's just another way to help meet SDL fuzzing requirements.</P>
<P>Adding a layer of hurt, as shown in the picture below, is pretty simple as it involves adding code to an application to tweak data as it comes into an application. You can work out where to place the fuzzing code by looking at your threat models to see where data crosses trust boundaries. You could also simply grep the code looking for APIs that read data, for example:</P>
<UL>
<LI>Read from files: fread, ReadFile</LI>
<LI>Reading from sockets: recv, recvfrom</LI>
<LI>For .NET code, any stream.Read</LI></UL>
<P>You get the picture.</P>
<P>The fuzzing code should appear right after the API that reads that data.</P>
<P mce_keep="true">For example, C or C++ code that reads from a UDP socket and then fuzzes the data before it's consumed by the rest of the application might look like this:</P><FONT size=1 face=Courier>
<P>char RecvBuf[1024];<BR>int&nbsp; BufLen = sizeof(RecvBuf);</P>
<P mce_keep="true">int result = recvfrom(<BR>&nbsp;&nbsp; RecvSocket, <BR>&nbsp;&nbsp; RecvBuf, <BR>&nbsp;&nbsp; BufLen, <BR>&nbsp;&nbsp; 0, <BR>&nbsp;&nbsp; (SOCKADDR *)&amp;SenderAddr, <BR>&nbsp;&nbsp; &amp;SenderAddrSize);</P></FONT><FONT size=1 face=Courier>
<P>#ifdef _FUZZ<BR>&nbsp;&nbsp; Fuzz(RecvBuf,&amp;BufLen);<BR>#endif</P></FONT>
<P>Or, in C#, code that reads from an untrusted file:</P><FONT size=1 face=Courier>
<P>FileStream fileStream = new FileStream(filename, FileMode.Open, FileAccess.Read);<BR>uint len = (uint)(fileStream.Length);<BR>byte[] fileData = new byte[fileStream.Length];<BR>fileStream.Read(fileData, 0, (int)len);<BR>fileStream.Close();</P></FONT><FONT size=1 face=Courier>
<P mce_keep="true">#if _FUZZ_<BR>&nbsp; Malform pain = new Malform();<BR>&nbsp; fileData = pain.Fuzz(fileData);<BR>#endif</P></FONT>
<P>In both code examples, Fuzz() mutates the incoming data. In the C++ case, the fuzzing code looks like this:</P><FONT size=1 face=Courier>
<P>void Fuzz(_Inout_bytecap_(*pcbBuf) char *pBuf, <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _Inout_ size_t *pcbBuf) {<BR><BR>&nbsp; if (!pcbBuf || !pBuf || !*pcbBuff || *pBuf) return;<BR>&nbsp; if ((rand() % 100) &gt; 5) return; // fuzz about 5% of Buffers</P>
<P>&nbsp; size_t cLoop = 1 + (rand() % 4);</P>
<P>&nbsp; for (size_t j = 0; j &lt; cLoop; j++) {</P>
<P>&nbsp;&nbsp;&nbsp; size_t i=0,&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iLow = rand() % *pcbBuf,&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iHigh = 1+rand() % *pcbBuf,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iIter = 1+rand() % 8;<BR><BR>&nbsp;&nbsp;&nbsp; if (iLow &gt; iHigh)&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {size_t t=iHigh; iHigh=iLow; iLow=t;}</P>
<P>&nbsp;&nbsp;&nbsp; char ch=0;<BR>&nbsp;&nbsp;&nbsp; switch(rand() % 9) {</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 0 : // reset upper bits<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (i=iLow; i &lt; iHigh; i++)&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pBuf[i] &amp;= 0x7F;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 1 : // set upper bits<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (i=iLow; i &lt; iHigh; i++)&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pBuf[i] |= 0x80;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 2 : // toggle all bits<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (i=iLow; i &lt; iHigh; i++)&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pBuf[i] ^= 0xFF;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 3 : // set to random chars<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (i=iLow; i &lt; iHigh; i++)&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pBuf[i] = (char)(rand() % 256);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 4 : // set NULL chars to (possibly) non-NULL<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (i=iLow; i &lt; iHigh; i++)&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!pBuf[i])&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pBuf[i] = (char)(rand() % 256);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 5 : // swap adjacent bytes<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (i=iLow; i &lt; __max(iHigh-1,iLow); i+= iIter)&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {char t=pBuf[i]; pBuf[i] = pBuf[i+1]; pBuf[i+1]=t;}&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 6 : // set to random chars every n-bytes<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (i=iLow; i &lt; __max(iHigh-1,iLow); i+= iIter)&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pBuf[i] = (char)(rand()%256);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 7 : // set bytes to one random char<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ch=(char)(rand() % 256);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (i=iLow; i &lt; iHigh; i++)&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pBuf[i] = ch;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; default: // truncate stream<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *pcbBuf = iHigh;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<BR>&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp; }<BR>}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </P></FONT>
<P>The sample C# and C++ fuzzing code is available as a ZIP file at the end of this post.</P>
<P>This code is an example of dumb-fuzzing, which is fuzzing with little or no regard for the data structure being manipulated. If you've never performed any kind of fuzz testing in the past, then you will probably find bugs with this simple fuzzing technique. Once you have weeded out the low-hanging bugs, you may need to turn your attention to smarter fuzzers. For example, in theory, this code would find few if any bugs in a PNG parser, because PNG files have a built in check-sum, so if you fuzz a PNG file, you'd have to recalculate the checksum to get decent code coverage.</P>
<P>When I showed this code during my presentation, I urged people to add it to their applications today if they currently don't do fuzz testing, and simply run their applications through their normal testing processes. Within three days of my presentation I received emails from people saying they had found bugs. I have no doubt others did too.</P>
<P>One of the comments I made during the session was,"If you can't spend the time on great fuzzing, fuzz anyway" and adding a "layer of hurt" is a reasonable start.</P>
<P>Please feel free to sound off if you have ideas to help improve the code and let us know what you think, either through email or comments to this post.</P><img src="http://blogs.msdn.com/aggbug.aspx?PostID=8794487" width="1" height="1">]]></content:encoded>
      <pubDate>Thu, 31 Jul 2008 15:13:00 +0000</pubDate>
      <category domain="http://securityratty.com/tag/layer">layer</category>
      <category domain="http://securityratty.com/tag/code layer">code layer</category>
      <category domain="http://securityratty.com/tag/code">code</category>
      <category domain="http://securityratty.com/tag/decent code coverage">decent code coverage</category>
      <category domain="http://securityratty.com/tag/fuzz">fuzz</category>
      <category domain="http://securityratty.com/tag/void fuzz">void fuzz</category>
      <category domain="http://securityratty.com/tag/ifdef fuzz">ifdef fuzz</category>
      <category domain="http://securityratty.com/tag/code examples">code examples</category>
      <category domain="http://securityratty.com/tag/perform fuzz">perform fuzz</category>
      <source url="http://blogs.msdn.com/sdl/archive/2008/07/31/improve-security-with-a-layer-of-hurt.aspx">Improve Security with "A Layer of Hurt"</source>
    </item>
    <item>
      <title><![CDATA[The Neosploit Malware Kit Updated with Snapshot ActiveX Exploit]]></title>
      <link>http://securityratty.com/article/cdb0e65d71e1f22f530bb119a6dfad61</link>
      <guid>http://securityratty.com/article/cdb0e65d71e1f22f530bb119a6dfad61</guid>
      <description><![CDATA[Raising Symantec's ThreatCon based on a newly introduced exploit within a (random) copy of a popular web malware exploitation kit? Now that's interesting given that there are other modified versions...]]></description>
      <content:encoded><![CDATA[<div style="text-align: left;"></div>
<div class="separator" style="text-align: center; clear: both;"></div>
<div style="text-align: left;"></div>
<div class="separator" style="text-align: center; clear: both;"></div>
<a href="http://bp2.blogger.com/_wICHhTiQmrA/SH0iJ1Zsz9I/AAAAAAAAB6s/mB7Ao8PwG78/s1600-h/neospl0it.jpg" imageanchor="1" style="border: 0pt none ; background-color: transparent; clear: left; margin-bottom: 1em; float: left; margin-right: 1em;"><img src="http://bp2.blogger.com/_wICHhTiQmrA/SH0iJ1Zsz9I/AAAAAAAAB6s/uEahgw5vGHo/s200-R/neospl0it.jpg" style="border: 0pt none ;" /></a>Raising <a href="http://www.symantec.com/security_response/threatcon/index.jsp">Symantec's ThreatCon</a> based on a newly introduced exploit within a (random) copy of a popular web malware exploitation kit? Now that's interesting given that there are other modified versions of the publicly available malware kit empowered with exploits as they get released, the single most logical move a administrator of such kit would do is diversity the exploits set as often as possible, keeping it up to date - like they do. ThreatCon is raised already : <br />
<br />
"<i>Symantec honeypots have captured further exploitation of the Snapshot Viewer for Microsoft Access ActiveX Control Arbitrary File Download Vulnerability (BID 30114). Before this event, this exploit was known to be used only in isolated attacks. Further analysis of these honeypot compromises has revealed that the exploit has been added to a variant of the neosploit exploit kit, it will very likely reach a larger number of victims. This version will compromise vulnerable English versions of Microsoft Windows by downloading a malicious application into the Windows Startup folder. Computers that have Microsoft Access installed are potentially affected by this vulnerability. Customers are advised to manually set the kill bit on the following CLSIDs until a vendor update is available: F0E42D50-368C-11D0-AD81-00A0C90DC8D9 F0E42D60-368C-11D0-AD81-00A0C90DC8D9 F2175210-368C-11D0-AD81-00A0C90DC8D9</i>"<br />
<br />
Why based on a random copy of the kit? Well, the Neosploit malware kit itself is a commodity despite it's publicly announced varying price in the thousands, it leaked for public use just like MPack and Icepack did originally, making statements on the exact type of the vulnerabilities included within a bit pointless, since it will only cover the the exploits included in a particular version only. Web malware exploitation kits are very modular, namely, anyone can introduce new exploits, and tweak them, which is what they've been doing for a while, mostly converging third party traffic management systems with the malware kits in order to improve both, the metrics, and the evasive practices used for making a particular campaign a bit more time consuming to analyze.<br />
<br />
Just like the innovations introduced within open source malware, and their <a href="http://ddanchev.blogspot.com/2008/05/icepack-exploitation-kit-localized-to.html">localizations to native languages</a>, the open source nature of web malware exploitation kit can result in countless number of variants whose new features make it sometimes difficult to assess whether or not it's a modified kit or an entirely new one - depending on the sophistication of the features of course. The introduction of new exploits within a copy of a particular malware kit should be considered as something logical, and if it's that big a deal, there are many other web malware exploitation kits whose features turn Neosploit into the "outdated choice" for malicious attackers.<br />
<br />
<b>Related posts:</b><br />
<a href="http://ddanchev.blogspot.com/2008/06/zeus-crimeware-kit-vulnerable-to.html">The Zeus Crimeware Kit Vulnerable to Remotely Exploitable Flaw</a><br />
<a href="http://ddanchev.blogspot.com/2008/05/small-pack-web-malware-exploitation-kit.html">The Small Pack Web Malware Exploitation Kit</a><br />
<a href="http://ddanchev.blogspot.com/2008/04/crimeware-in-middle-zeus.html">Crimeware in the Middle - Zeus</a><br />
<a href="http://ddanchev.blogspot.com/2006/11/nuclear-grabber-toolkit.html">The Nuclear Grabber Kit</a><br />
<a href="http://ddanchev.blogspot.com/2008/02/rbns-phishing-activities.html">The Apophis Kit</a><br />
<a href="http://ddanchev.blogspot.com/2008/05/firepack-exploitation-kit-localized-to.html">The FirePack Exploitation Kit Localized to Chinese</a><span style="font-weight: bold;"><br />
</span><a href="http://ddanchev.blogspot.com/2007/10/mpack-and-icepack-localized-to-chinese.html">MPack and IcePack Localized to Chinese</a><br />
<span style="font-weight: bold;"><span style="font-weight: bold;"></span></span><a href="http://ddanchev.blogspot.com/2008/04/firepack-exploitation-kit-part-two.html">The FirePack Exploitation Kit - Part Two</a><br />
<a href="http://ddanchev.blogspot.com/2008/02/firepack-web-malware-exploitation-kit.html">The FirePack Web Malware Exploitation Kit</a><br />
<a href="http://ddanchev.blogspot.com/2007/05/webattacker-in-action.html">The WebAttacker in Action</a><br />
<a href="http://ddanchev.blogspot.com/2007/08/nuclear-malware-kit.html">Nuclear Malware Kit</a><br />
<a href="http://ddanchev.blogspot.com/2008/01/random-js-malware-exploitation-kit.html">The Random JS Malware Exploitation Kit</a><br />
<a href="http://ddanchev.blogspot.com/2007/11/metaphisher-malware-kit-spotted-in-wild.html">Metaphisher Malware Kit Spotted in the Wild</a><br />
<a href="http://ddanchev.blogspot.com/2007/04/shots-from-malicious-wild-west-sample_7672.html">The Black Sun Bot</a><br />
<a href="http://ddanchev.blogspot.com/2007/04/shots-from-malicious-wild-west-sample_20.html">The Cyber Bot</a><br />
<a href="http://ddanchev.blogspot.com/2007/09/google-hacking-for-mpacks-zunkers-and.html">Google Hacking for MPacks, Zunkers and WebAttackers</a><br />
<a href="http://ddanchev.blogspot.com/2007/07/icepack-malware-kit-in-action.html">The IcePack Malware Kit in Action</a><b></b><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/DanchoDanchevOnSecurityAndNewMedia?a=Jx8ooJ"><img src="http://feeds.feedburner.com/~f/DanchoDanchevOnSecurityAndNewMedia?i=Jx8ooJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/DanchoDanchevOnSecurityAndNewMedia?a=LU766J"><img src="http://feeds.feedburner.com/~f/DanchoDanchevOnSecurityAndNewMedia?i=LU766J" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/DanchoDanchevOnSecurityAndNewMedia?a=QpSw5j"><img src="http://feeds.feedburner.com/~f/DanchoDanchevOnSecurityAndNewMedia?i=QpSw5j" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/DanchoDanchevOnSecurityAndNewMedia?a=stfGFj"><img src="http://feeds.feedburner.com/~f/DanchoDanchevOnSecurityAndNewMedia?i=stfGFj" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/DanchoDanchevOnSecurityAndNewMedia?a=mJPqCJ"><img src="http://feeds.feedburner.com/~f/DanchoDanchevOnSecurityAndNewMedia?i=mJPqCJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/DanchoDanchevOnSecurityAndNewMedia?a=LtSgeJ"><img src="http://feeds.feedburner.com/~f/DanchoDanchevOnSecurityAndNewMedia?i=LtSgeJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/DanchoDanchevOnSecurityAndNewMedia?a=B03vhj"><img src="http://feeds.feedburner.com/~f/DanchoDanchevOnSecurityAndNewMedia?i=B03vhj" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/DanchoDanchevOnSecurityAndNewMedia/~4/336492607" height="1" width="1"/>]]></content:encoded>
      <pubDate>Tue, 15 Jul 2008 13:18:32 +0000</pubDate>
      <category domain="http://securityratty.com/tag/neosploit malware kit">neosploit malware kit</category>
      <category domain="http://securityratty.com/tag/malware kit">malware kit</category>
      <category domain="http://securityratty.com/tag/nuclear malware kit">nuclear malware kit</category>
      <category domain="http://securityratty.com/tag/kit">kit</category>
      <category domain="http://securityratty.com/tag/metaphisher malware kit">metaphisher malware kit</category>
      <category domain="http://securityratty.com/tag/icepack malware kit">icepack malware kit</category>
      <category domain="http://securityratty.com/tag/nuclear grabber kit">nuclear grabber kit</category>
      <category domain="http://securityratty.com/tag/apophis kit">apophis kit</category>
      <category domain="http://securityratty.com/tag/neosploit exploit kit">neosploit exploit kit</category>
      <source url="http://feeds.feedburner.com/~r/DanchoDanchevOnSecurityAndNewMedia/~3/336492607/neosploit-malware-kit-updated-with.html">The Neosploit Malware Kit Updated with Snapshot ActiveX Exploit</source>
    </item>
    <item>
      <title><![CDATA[Feature Request #1: Stable Code]]></title>
      <link>http://securityratty.com/article/8ccf3e65d2b1b8b72fdbe0860c092c80</link>
      <guid>http://securityratty.com/article/8ccf3e65d2b1b8b72fdbe0860c092c80</guid>
      <description><![CDATA[I have a note to all network hardware vendors
Dear network vendor
As someone that is forced to configure and implement security on your hardware, I would greatly appreciate stable code and properly...]]></description>
      <content:encoded><![CDATA[<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; I have a note to all network hardware vendors&#8230;</em></p><p>Dear network vendor,</p><p>As someone that is forced to configure and implement security on your hardware, I would greatly appreciate stable code and properly functioning features. Unfortunately, I cannot always choose the hardware my customers are using in their infrastructure. However, if you would like for me to recommend they continue purchasing and using it, then the product must demonstrate to me that it is: capable, reliable, predictable and well-documented. If your product is not meeting these requirements, I&#8217;m forced to recommend other solutions to your (current) customer. </p><p><u>Stable Code</u>. If I have to spend 2-6 hours per implementation working through your product&#8217;s bugs, and then must either spend time on a support call or spend time getting packet captures to prove to you it&#8217;s not working, I am not a happy camper because you&#8217;re slowing down my progress. Your customer is not happy because they&#8217;re paying for that time and I&#8217;m not cheap. </p><p><u>Features</u>. Don&#8217;t publish in technical documentation that your product, or code can do something, only for me to find out later that it cannot. On-site in the middle of an implementation is not the time to architect Plan B. Let me know before, either through technical docs, white papers, best practices or release notes. I do read those. If you want to bend the truth, do it the marketing fluff, not my technical documents. </p><p><u>Documentation</u>. If your product <em>does</em> do what you say it does, then please do document and explain the concepts and procedures. Examples are good, but explanations are mandatory. A correct CLI reference is always lovely as well. If there are got&#8217;chas or tricks, please also document those. Again, white papers or release notes are fine. Having to track down the one security engineer from your company that holds the magic key is not practical, nor scalable. Plus, he may be on vacation during my install, which would make me irate. </p><p><u>Support</u>. If your product is not functioning or performing as expected, do NOT expect your customers to have a current maintenance contract to address a known issue or bug (or an un-known issue or bug for that matter). If they found a bug for you, you should probably <em>give</em> them a maintenance contract for a year&#8230; or two. If you don&#8217;t let us call support, I will find one of your pre-sales engineers and we will use him or her for post-sales support, which is not what you want them to do. But that&#8217;s your problem, not mine.</p><p>I believe that sums up the major issues. Specifically, I am interested in security, RADIUS, SSH, SNMP, DHCP&nbsp;and 802.1X functions. Before you add another bell or tweak another whistle, please make what you have works&#8230; consistently. That should be first, so it&#8217;s my Feature Request #1. </p><p>Respectfully,</p><p>jj</p><p># # #</p>
]]></content:encoded>
      <pubDate>Mon, 30 Jun 2008 00:01:00 +0000</pubDate>
      <category domain="http://securityratty.com/tag/code">code</category>
      <category domain="http://securityratty.com/tag/stable code">stable code</category>
      <category domain="http://securityratty.com/tag/support">support</category>
      <category domain="http://securityratty.com/tag/post-sales support">post-sales support</category>
      <category domain="http://securityratty.com/tag/current maintenance contract">current maintenance contract</category>
      <category domain="http://securityratty.com/tag/current">current</category>
      <category domain="http://securityratty.com/tag/maintenance contract">maintenance contract</category>
      <category domain="http://securityratty.com/tag/security engineer">security engineer</category>
      <category domain="http://securityratty.com/tag/security">security</category>
      <source url="http://www.securityuncorked.com/security-uncorked/2008/6/30/feature-request-1-stable-code.html">Feature Request #1: Stable Code</source>
    </item>
    <item>
      <title><![CDATA[Latest 802.11 Standard Boosts Wi-Fi Power in New Band]]></title>
      <link>http://securityratty.com/article/8a175684170e876da287683bcc08e2a3</link>
      <guid>http://securityratty.com/article/8a175684170e876da287683bcc08e2a3</guid>
      <description><![CDATA[The nearly finished IEEE 802.11y could make Wi-Fi more practical over longer distances : Wi-Fi is a compromise. In the unlicensed bands in which it operates, it has to deal with interference from...]]></description>
      <content:encoded><![CDATA[<p><a href="http://www.warpspeed.com/wordpress/?p=2406"><strong>The nearly finished IEEE 802.11y could make Wi-Fi more practical over longer distances</strong></a>: Wi-Fi is a compromise. In the unlicensed bands in which it operates, it has to deal with interference from noise sources and other networks, while using very low power, and trying not to make a pest of itself. It's done very well. In the 2.4 GHz band and parts of 5 GHz, the maximum power from the radio is 1 watt (W), and the effective power (EIRP) is 4 W on an omnidirectional antenna. (You can push far more power if you narrow the antenna's beam. And parts of the 5 GHz band restrict radio power below 1 W. I wrote <a href="http://wifinetnews.com/archives/007336.html"><strong>a long rundown of 5 GHz issues</strong></a> back in Jan-2007.)</p>

<p>But there's this lovely new segment of lightly licensed spectrum in the U.S., the 3.65 GHz band. It's a non-exclusive licensed band available only in parts of the country that don't have pre-existing ground-to-satellite or radar uses that overlap. This omits most of the eastern seaboard and most major cities; Seattle is one exception.</p>

<p>The licensing mechanism allows any number of operators to obtain inexpensive licenses, and register the base stations they use by location. If interference arises among base stations, operators are required to work out the problems themselves. I wrote extensively about this band and its rules on 9-May-2008 in <a href="http://wifinetnews.com/archives/008313.html"><strong>profiling Azulstar</strong></a>, formerly a metro-scale Wi-Fi firm, but now a big proponent of WiMax in 3.65 GHz. I also <a href="http://wimaxnetnews.com/archives/2007/06/fcc_affirms_365.html"><strong>went over the rules</strong></a> for the band on 11-June-2007 when the FCC announced the arrangement. </p>

<p>Several firms offer base station and customer premises equipment for this band now, so close to the 3.5 GHz band more commonly exclusively licensed in Europe and elsewhere. WiMax equipment is available because the 3.65 GHz band can be used with WiMax without any modifications to that protocol, although limited to just 25 MHz of the 50 MHz that the FCC set aside.</p>

<p>Equipment that conforms to a more stringent set of rules about contention and other factors can use the whole 50 MHz, and that's where 802.11y comes in. It's an extension of Wi-Fi to cope with the specific needs--and to open Wi-Fi technology up to 20 W EIRP, a vastly higher power output. This could allow connections over 5 km, the group says.</p>

<p>The <a href="http://en.wikipedia.org/wiki/IEEE_802.11y"><strong>Wikipedia entry on 802.11y</strong></a>, clearly written by someone involved with the specification, notes that three specific additions are needed: a tweak to support the way in which the FCC wants contention among competing devices to work; a method for an access point to tell a station (a connecting radio) that it's about to switch its channel or its channel's bandwidth, and the station should do likewise; and a mechanism to handle a base station allowing or revoking permission to use the spectrum without uniquely identifying the user's system or broadcasting its precise GPS-based location.</p>

<p>The standard is near completion and initial approval. I don't have any knowledge about whether any mainstream Wi-Fi equipment makers or metro-scale equipment makers are looking into building 802.11y into their gear. </p>

<p>The fact is that this could be a great technology for the mostly sub-metropolitan markets that 3.65 GHz is available in, although it has the same pain as WiMax: all new gear on the towers and all new adapters for customers.</p>]]></content:encoded>
      <pubDate>Wed, 25 Jun 2008 10:01:44 +0000</pubDate>
      <category domain="http://securityratty.com/tag/band">band</category>
      <category domain="http://securityratty.com/tag/power">power</category>
      <category domain="http://securityratty.com/tag/wi-fi">wi-fi</category>
      <category domain="http://securityratty.com/tag/ghz band">ghz band</category>
      <category domain="http://securityratty.com/tag/ghz">ghz</category>
      <category domain="http://securityratty.com/tag/equipment">equipment</category>
      <category domain="http://securityratty.com/tag/wimax equipment">wimax equipment</category>
      <category domain="http://securityratty.com/tag/metro-scale wi-fi firm">metro-scale wi-fi firm</category>
      <category domain="http://securityratty.com/tag/power output">power output</category>
      <source url="http://wifinetnews.com/archives/008379.html">Latest 802.11 Standard Boosts Wi-Fi Power in New Band</source>
    </item>
    <item>
      <title><![CDATA[Notes from IEEE Web 2.0 Security and Privacy Workshop (W2SP2008)]]></title>
      <link>http://securityratty.com/article/52942044add67bfabfce0e3b310191f5</link>
      <guid>http://securityratty.com/article/52942044add67bfabfce0e3b310191f5</guid>
      <description><![CDATA[Thursday 5/22 I was at the IEEE Web 2.0 Security and Privacy Workshop . I figured I'd learn a few things, and also make sure that no new exploits were announced against my employer, and/or make sure...]]></description>
      <content:encoded><![CDATA[Thursday 5/22 I was at the <a href="http://seclab.cs.rice.edu/w2sp/2008/">IEEE Web 2.0 Security and Privacy Workshop</a>.   I figured I'd learn a few things, and also make sure that no new exploits were announced against my employer, and/or make sure we weren't the only examples people gave of problems.<br /><br />I was pretty successful on goal #1, not 100% successful on goal #2.<br /><br />This post is mostly brain dump of notes about the talks followed by a few things of architectural interest that I think were discussed enough at the workshop.  A quick preview - the first half of the conference was spent talking about general security holes in Web-1.0 that we still haven't solved technically/architecturally/culturally.  With that in mind its hard to see how we're going to have much success with Web-2.0 security.<br /><br />I'll start by saying though that I was ever so slightly disappointed with the makeup of the attendees.  Conferences and workshops held by the IEEE and ACM do generally tend towards the seriously geeky and academic side of things.  You're much more likely to find papers that are suitable for journals with plenty of academic references, peer review, CS technical terms, formulas, etc.  At the same time though workshops do tend towards the less academic and more practical side.  It was disappointing therefore that, though the workshop focused a lot of time on things like secure mashups, social networks, and Web-2.0 security models, to the best of my knowledge very few of the players in this space were present.  I didn't meet anyone from any of the really interesting mashup companies and none of the social networks were there (minus google, who was well represented).  Perhaps in the future people attending and organizing workshops like these can actually get the folks at the relevant companies interested, specifically invite them, etc.<br /><br />Now, onto the papers/presentations themselves:<br /><br /><span style="font-size:130%;"><span style="font-weight: bold;">Session 1: Authentication and Authorization </span></span><br /><br /><span style="font-weight: bold;">Daniel Sandler and Dan S. Wallach. <span style="text-decoration: underline;"><span style="font-style: italic;"></span></span></span><i><a href="http://www.blogger.com/papers/s1p2.pdf">&lt;input type="password"&gt; must die!</a></i><br />Daniel presented some good idea on how to move password authentication into the browser chrome to improve our defenses against javascript malware such as javascript keyloggers, etc.<br /><br />While the work Daniel did was quite cool in that it doesn't require any protocol modifications, to be truly useful in implementing authentication inside browser chrome you probably need involvement from the site itself to hint, tweak, etc.  Once you start doing that though, you start looking at doing stuff like cardspaces to actually get to a better architectural solution.<br /><br /><span style="font-weight: bold;">Ben Adida</span>. <i><a href="http://seclab.cs.rice.edu/w2sp/2008/papers/s1p1.pdf">Web Authentication by Email Address</a></i><br /><br />Ben focused on usability concerns in OpenID and the idea that email addresses (or things that look like email addresses) are much better identifiers than URLs.  He sketched out how to modify OpenID to use email addresses or lookalikes for authentication rather than URLs.  Some of his proposals hinge on using DNS lookups for a domain to find the authentication server much like we use MX records for email.  While potentially risky, DNSSEC could theoretically be used to mitigate some of the problems.<br /><br />I must say I haven't kept up with OpenID as much as I'd like to, and so I'm 99% sure lots of the nuance of Ben's proposal was lost on me.<br /><br /><span style="font-weight: bold;font-size:130%;" > Session 2: Browser Security Models and Isolation</span><br /><br /><span style="font-weight: bold;">Collin Jackson and Adam Barth</span>. <i><a href="http://seclab.cs.rice.edu/w2sp/2008/papers/s2p1.pdf">Beware of Finer-Grained Origins</a></i><br /><br />Collin Jackson presented some work he and Adam have done on how the browser security model, namely the same-origin policy, isn't nearly granular enough to handle most web applications and sites that host them.<br /><br />For example:<br /><br />http://cs.stanford.edu/~abarth<br />http://cs.stanford.edu/~cjackson<br /><br />both have the same origin from the browsers point of view, but don't necessarily have the same security policy per use intent.  Because the web browser can't really distinguish between them, we don't have a clean way of separating the security policies here.<br /><br />Collin went on to show a multitude of problems in the same origin policy between sites, and problems in the upgrade/downgrade of security indicators in a browser.  I won't rehash all of his results but suffice it to say we desperately need things like ForceHTTPS embeded in browsers in the near future to prevent some of these problems.<br /><br /><p><span style="font-weight: bold;">Kapil Singh and Wenke Lee</span>. <i><a href="http://seclab.cs.rice.edu/w2sp/2008/papers/s2p2.pdf">On the Design of a Web Browser: Lessons learned from Operating Systems</a></i></p>Kapil presented some research his team has been doing on modeling web browsers more like operating systems.  You might have seen some related work recently as part of the <a href="http://www.engr.uiuc.edu/news/?xId=074108160700">OP Browser project</a>.   The idea is that the internal implementation of most browsers is pretty dicey from a security perspective.  There is no clean separation between policy and mechanism.  All code operates at the same privilege level. Plugins cannot be constrained in what they can do, etc.<br /><br />I haven't seen any analysis yet comparing what MS did with IE7 on Vista in protected mode as compared to OP or Kapil's work.  It is pretty clear that MS didn't fully segment IE7, but I wonder how close they got to ideal on the sandboxing side of things.<br /><br />That said, I think our biggest problem in browser security isn't the implementation and internal segmentation.  Our biggest problem is that we don't have any idea what security policies we really want to implement.  Sure, having a flexible architecture under the hood makes it easier to implement flexible and finer-grained policies, but unless we have some idea what those are, perhaps we're putting the cart before the horse in terms of robust internal implementation.<br /><br /><p><span style="font-weight: bold;">Mike Ter Louw, Prithvi Bisht and V.N. Venkatakrishnan.</span> <i><a href="http://seclab.cs.rice.edu/w2sp/2008/papers/s2p3.pdf">Analysis of Hypertext Markup Isolation Techniques for XSS Prevention</a></i></p>My favorite presentation of the day was this one by Mike Ter Louw.  Mike talked all about the multiple ideas circulating out there related to content restrictions.  He showed the different failure modes for several of the proposals, showed how some of them can be rescued, and pointed towards areas that need more research.<br /><br />The idea of content restrictions and server-indicated security policy that clients interpret and enforce is a really hot idea right now, and I'm hoping to catch up with Mike in the not too distant future.<br /><br />Mike - if you see this, drop me a note :)<br /><br /><span style="font-size:130%;"><span style="font-weight: bold;"> Session 3: Social Computing Privacy Issues </span></span><br /><p><span style="font-weight: bold;">Adrienne Felt and David Evans</span>. <i><a href="http://seclab.cs.rice.edu/w2sp/2008/papers/s3p1.pdf">Privacy Protection for Social Networking Platform</a></i></p>Adrienne presented some work she's done on weaknesses in the security model of social networks and paltforms such as Facebook.  She analyzed a bunch of Facebook applications to understand whether they really ought to be granted all of the rights over user data that they are.  She proposed some mechanisms for limiting what types of applications get access to what data by enhancing the FBML tags to allow an application to get more data without API access.  She also showed how you can solve some data sharing rules with just FBML and a few permissions extensions without resorting to full API access.<br /><br />What Adrienne didn't come out and say is that in some contexts things like vetting are actually important.  Most people in the social networking space and Web-2.0 space don't want to look at things like vetting, legal relationships, etc. as a model for achieving security.  While a preventative model looks great on paper, solving some of the data safety/privacy concerns can really only be handled through contracts, vetting, etc.  No amount of hoping developers will do the right thing and develop least-privilege applications will solve this problem.<br /><br /><p><span style="font-weight: bold;">Monica Chew, Dirk Balfanz, and Ben Laurie.</span> <i><a href="http://seclab.cs.rice.edu/w2sp/2008/papers/s3p2.pdf">(Under)mining Privacy in Social Networks</a></i></p>Monica presented some research on how we can inadvertently leak data from social networks by a multitude of means.  While it was an interesting talk on how you can aggregate data from multiple locations to pin down more details than you ought to, since I'm not a heavy user of social networks I found myself less than interested in the general problem.  If you're going to post large amounts of personal data online in multiple online sources, you're going to have people aggregating them together.  There is only so much we can do to protect ourselves against that sort of aggregation.<span style="font-size:130%;"><br /><br /><span style="font-weight: bold;"> Session 4: Mashups and Privacy </span></span><br /><p><span style="font-weight: bold;">D. K. Smetters.</span> <i><a href="http://seclab.cs.rice.edu/w2sp/2008/papers/s4p1.pdf">Building Secure Mashups</a></i></p>D.K.'s talk was quite short on technical details and yet was one of the better talks of the day.  Whereas I had a few complaints about Kapil's talk earlier in the day being a solution looking for a problem, D.K.'s talk was about the problem itself - namely - how do we actually define the security policy we're trying to achieve in the mashup space, what sorts of general rules ought to govern application behavior, security properties, etc.<br /><br />This was the first talk of the day to really talk about user expectations for security, what we should generally understand to be user intent, and how to actually try and implement that in a mashup application.<br /><br /><p><span style="font-weight: bold;">Tyler Close</span>. <i><a href="http://seclab.cs.rice.edu/w2sp/2008/papers/s4p2.pdf">Web-key: Mashing with Permission</a></i></p><p>Tyler's talk may have been the most entertaining of the day, if only because of his obvious frustration with what the web has become.  Tyler's main claim was that we ought to  be using capability URLs to handle our authentication and authorization concerns.  URLs that encode both authentication and authorization data bring us back to the original intent of the web, where the link is everything.</p><p>It was nice to see someone railing against a bit of what the web has become, but it almost felt like an original internet user lamenting the end of the end-to-end internet.  A decent architectural argument, and yet one that isn't likely to yield a lot of converts.  I don't think I understood a few of Tyler's points about how to prevent these URLs from leaking out and/or how to revoke access should they happen to.  There are a multitude of user acceptance, behavior, and expectation questions to be answered.  It was a nice twist though on how to perhaps make access-controlled content more in keeping with the spirit of the web.</p><p><span style="font-weight: bold;">Mihai Christodorescu</span>. <i><a href="http://seclab.cs.rice.edu/w2sp/2008/papers/s4p3.pdf">Private Use of Untrusted Web Servers via Opportunistic Encryption</a></i></p><p>Mihai's presentation was about how to take advantage of networked services/web-applications while proividing them with only opaque data references created with cryptography.  His main example was about how to use Google's Calendar product without ever sending them your real data, and sending them only client-side encrypted data instead.</p><p>While it seems like a nice idea, and while parts of his solution were technically elegant, I think again it was a solution looking for a problem.  If you're so concerned about a networked service having your data that you're willing to reverse engineer the service to make it store your individual data elements encrypted, then perhaps a networked service isn't the one for you.  TYhe architectural challenges in achieving what he was able to with Google's calendar are nearly impossible with a more complicated service.  And, in order to make it work you have to give up many of the feature's you'd really like from a service - full text searching, etc.</p><p>I'm guessing there are a few places where's Mihai's ideas are feasible, but its hard for me to see the value prop in building what he proposed.</p><p><br /></p><p style="font-weight: bold;"><span style="font-size:130%;">Some Final Thoughts:</span></p><ul><li>We haven't come close to solving the security problems in a Web-1.0 world</li><li>We don't know what the security policies really ought to look like for the web, consequently we don't know what the architecture and implementation look like either.</li><li>Browsers are lacking fundamental architecture and policy around security.</li><li>Web-2.0 only makes things worse</li></ul>Apart from all of the unsolved security challenges, the biggest point that struck me from the workshop was the general belief (or I assume belief, I didn't challenge people on it) that mashups are here to stay, and that we're just going to have to back into a security model for them.<br /><br />I remain unconvinced that a client-side application mashup between datasets is the only way to build new and  innovative applications, and that if there were any liability concerns or even contracts that held some of these companies/services even semi-accountable, perhaps we'd have a very different architecture than we're seeing as part of the mashup space.<br /><br />We're spending time and money working on specs like XDR, HTML5-access-control, and we still haven't solved some of the fundamental security problems of the web.  I didn't see anything at this workshop to dissuade me from that perception either.<br /><br />Its like the old saying goes - "If it ain't fixed - don't break it more".  Well, ok, that isn't an old saying, but maybe a few of the people working on mashups and social networks could actually operate with that as their motto we'd make some progress on all of this.<img src="http://feeds.feedburner.com/~r/SecurityRetentive/~4/299601333" height="1" width="1"/>]]></content:encoded>
      <pubDate>Tue, 27 May 2008 18:45:00 +0000</pubDate>
      <category domain="http://securityratty.com/tag/browser">browser</category>
      <category domain="http://securityratty.com/tag/browser security models">browser security models</category>
      <category domain="http://securityratty.com/tag/browser project">browser project</category>
      <category domain="http://securityratty.com/tag/browser security model">browser security model</category>
      <category domain="http://securityratty.com/tag/security models">security models</category>
      <category domain="http://securityratty.com/tag/browser security">browser security</category>
      <category domain="http://securityratty.com/tag/security">security</category>
      <category domain="http://securityratty.com/tag/web">web</category>
      <category domain="http://securityratty.com/tag/security challenges">security challenges</category>
      <source url="http://feeds.feedburner.com/~r/SecurityRetentive/~3/299601333/notes-from-ieee-web-20-security-and.html">Notes from IEEE Web 2.0 Security and Privacy Workshop (W2SP2008)</source>
    </item>
    <item>
      <title><![CDATA[Criminals target CA's BrightStor in new attack]]></title>
      <link>http://securityratty.com/article/9eaef08c468f3f7e28dc4ef06ab27f63</link>
      <guid>http://securityratty.com/article/9eaef08c468f3f7e28dc4ef06ab27f63</guid>
      <description><![CDATA[A nasty vulnerability in CA's BrightStor ARCserve Backup software will require, for now, that users hand-tweak a setting in Windows...]]></description>
      <content:encoded><![CDATA[A nasty vulnerability in CA's BrightStor ARCserve Backup software will require, for now, that users hand-tweak a setting in Windows Registry.
<p><a href="http://feeds.computerworld.com/~a/Computerworld/Security/News?a=o9KwmQ"><img src="http://feeds.computerworld.com/~a/Computerworld/Security/News?i=o9KwmQ" border="0"></img></a></p><img src="http://feeds.computerworld.com/~r/Computerworld/Security/News/~4/257510292" height="1" width="1"/>]]></content:encoded>
      <pubDate>Tue, 25 Mar 2008 07:33:33 +0000</pubDate>
      <category domain="http://securityratty.com/tag/windows registry">windows registry</category>
      <category domain="http://securityratty.com/tag/users hand-tweak">users hand-tweak</category>
      <category domain="http://securityratty.com/tag/nasty vulnerability">nasty vulnerability</category>
      <category domain="http://securityratty.com/tag/require">require</category>
      <source url="http://feeds.computerworld.com/~r/Computerworld/Security/News/~3/257510292/article.do">Criminals target CA's BrightStor in new attack</source>
    </item>
    <item>
      <title><![CDATA[ZDNet Asia and TorrentReactor IFRAME-ed]]></title>
      <link>http://securityratty.com/article/df74c86ba5fb18bfbd0b35c3905e5f21</link>
      <guid>http://securityratty.com/article/df74c86ba5fb18bfbd0b35c3905e5f21</guid>
      <description><![CDATA[This currently ongoing malware embedded attack aimed at ZDNet Asia and TorrentReactor is very creative at the strategic level, whereas the IFRAME-ing tactic remains the same. The sites' search engines...]]></description>
      <content:encoded><![CDATA[<a href="http://bp3.blogger.com/_wICHhTiQmrA/R81SAwsZynI/AAAAAAAABao/PzDWIlVlYaI/s1600-h/zdnet_asia_iframe.jpg"><img id="BLOGGER_PHOTO_ID_5173881719943187058" style="margin: 0px 10px 10px 0px; float: left;" alt="" src="http://bp3.blogger.com/_wICHhTiQmrA/R81SAwsZynI/AAAAAAAABao/PzDWIlVlYaI/s200/zdnet_asia_iframe.jpg" border="0" /></a><div>This currently ongoing malware embedded attack aimed at ZDNet Asia and TorrentReactor is very creative at the strategic level, whereas the IFRAME-ing tactic remains the same. The sites' search engines seem to have been exploited to have the IFRAME injected, not embedded, within the last 24 hours, redirecting to known Russian Business Network's IPs and ex-customers in the face of rogue anti-virus and anti-spyware applications. For the time being, <strong>zdnetasia.com has 11,200 cached pages loading the IFRAME</strong>, and <strong>torrentreactor.net - 29,300 cached</strong><strong> pages loading the IFRAME</strong>. Even worse, the IFRAME embedded search results hosted on their sites, are appearing between the first ten to twenty search results, thanks to the sites high page ranks. Sample search queries :<br /><br /><em>jamie presley</em><br /><div><em>mari misato</em></div><em>risa coda</em><br /><div><em>kasumi tokumoto</em></div><div><em>jill criscuolo</em></div><br /><div><a href="http://bp0.blogger.com/_wICHhTiQmrA/R81SoAsZyoI/AAAAAAAABaw/38ezpy_-PGQ/s1600-h/zdnet_asia_obfuscation.jpg"><img id="BLOGGER_PHOTO_ID_5173882394253052546" style="margin: 0px 10px 10px 0px; float: left;" alt="" src="http://bp0.blogger.com/_wICHhTiQmrA/R81SoAsZyoI/AAAAAAAABaw/38ezpy_-PGQ/s200/zdnet_asia_obfuscation.jpg" border="0" /></a>The IFRAME is loading <strong>72.232.39.252/a</strong> also responding to <strong>themaleks.net</strong>. The link itself is loading an obfuscated javascript, which once deobfuscated attempts to load <strong>a-n-d-the.com/wtr/router.php</strong> (216.255.185.82 - INTERCAGE-NETWORK-GROUP2) also responding to <strong>ppcan.info</strong>, with two more domains sharing nameservers, <strong>findhowto.net</strong>, <strong>searchhowto.net</strong>. Ppcan.net has already been assessed by <a href="http://research.microsoft.com/users/shuochen/HM.doc">Microsoft's Security Team</a> :</div><div><br /></div>"<em>The advantage gained by faking the Referer field is nullified when pages use client-side cloaking to distinguish between fake and real Referer field data by running a script in the client’s browser to check the document.referrer variable. Example 1 shows a script used by the spam URL naha.org/old/tmp/evans-sara-real-fine-place/index.html. The script checks whether the document.referrer string contains the name of any major search engines. If successful the browser redirects to ppcan.info/mp3re.php and eventually to spam; otherwise, the browser stays at the current doorway page. To defeat the simple client-side cloaking, issuing a query of the form “url:link1” is sufficient. This allows us to fake a click through from a real search engine page.</em>"</div><div> </div><br /><div>So the malicious parties are implementing simple referrer techniques to verify that the end users coming to their IP, are the ones they expect to come from the campaign, and not client-side honeypots or even security researchers. And if you're not coming from you're supposed to come, you get a 404 error message, deceptive to the very end of it. Sample redirects upon visiting the IFRAME-ed pages at ZDNet Asia with the right referrer :</div><br /><div> </div><strong>xpantivirus2008.com </strong>(69.50.173.10)<br /><div><strong>scanner.spyshredderscanner.com </strong>(77.91.229.106)</div><strong>hot-porn</strong><strong>otube-2008.com </strong>(206.51.229.67)<br /><div><strong>porn-tubecodec20.com </strong>(195.93.218.43)</div><br /><div> </div>Once the junkware inventory is empty, all pages redirect to <strong>requestedlinks.com</strong> (216.255.185.82). Let's take a peek at the codec :<br /><div> </div><br /><div><strong>Scanner results</strong> : 11% Scanner (4/36) found malware!</div><strong>File Size</strong> : 85008 byte<br /><div><strong>MD5</strong> : 6b325c53987c488c89636670a25d5664</div><strong>SHA1</strong> : c6aeeafffe10e70973a45e5b6af97304ca20b3bd<br /><div><strong>Fortinet</strong> - Suspicious</div><strong>Norman</strong> - Tibs.gen200<br /><div><strong>Prevx</strong> - TROJAN.DOWNLOADER.GEN</div><strong>Quick Heal</strong> - Suspicious - DNAScan<br /><div> </div><br /><div>Even more interesting is the fact that literally minutes before posting this, another such campaign got launched at ZDNet Asia, this time having just 24 pages locally cached, and loading another IFRAME to <strong>89.149.243.201/a</strong> redirecting to <strong>cialis2men.com/product/61 </strong>(92.241.162.154).<br /><div><br /></div><div><a href="http://bp0.blogger.com/_wICHhTiQmrA/R81UBAsZypI/AAAAAAAABa4/vm4-rYcZreI/s1600-h/torrentreactor_IFRAME.jpg"><img id="BLOGGER_PHOTO_ID_5173883923261409938" style="margin: 0px 10px 10px 0px; float: left;" alt="" src="http://bp0.blogger.com/_wICHhTiQmrA/R81UBAsZypI/AAAAAAAABa4/vm4-rYcZreI/s200/torrentreactor_IFRAME.jpg" border="0" /></a>What is going on, have the sites been compromised, or the attackers are in fact smarter than those who would even bother to scan for remotely exploitable web application vulnerabilities, next to remote file inclusion? ZDNet Asia and TorrentReactor themselves aren't compromised, their SEO practices of locally caching any search queries submitted are abused. Basically, whenever the malicious attacker is feeding the search engine with popular quaries, the sites are caching the search results, so when the malicious party is also searching for the IFRAME in an "loadable state" next to the keyword, it loads. Therefore, relying on the high page ranks of both sites, the probability to have the cached pages with the popular key words easy to find on the major search engines, with the now "creative" combination of the embedded IFRAME, becomes a reality if you even take a modest sample, mostly names.</div><br /><div><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_wICHhTiQmrA/R81mmAsZyqI/AAAAAAAABbA/dW0kdjnXWHs/s1600-h/zdnet_asia_fake_codec.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp0.blogger.com/_wICHhTiQmrA/R81mmAsZyqI/AAAAAAAABbA/dW0kdjnXWHs/s200/zdnet_asia_fake_codec.jpg" alt="" id="BLOGGER_PHOTO_ID_5173904350125869730" border="0" /></a>The bottom line is that ZDNet Asia and TorrentReactor SEO practices of caching the search queriesAnd given that the malicius parties can now easily tweak popular keywords to appear on ZDNet Asia and TorrentReactor's sites, thereby getting a front placement on search engines, they can pretty much shift the SEO campaign to a malware campaign by taking advantage of "event-based social engineering".</div></div><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/DanchoDanchevOnSecurityAndNewMedia?a=VBVN8pF"><img src="http://feeds.feedburner.com/~f/DanchoDanchevOnSecurityAndNewMedia?i=VBVN8pF" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/DanchoDanchevOnSecurityAndNewMedia?a=yOvop1F"><img src="http://feeds.feedburner.com/~f/DanchoDanchevOnSecurityAndNewMedia?i=yOvop1F" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/DanchoDanchevOnSecurityAndNewMedia?a=1opAYZf"><img src="http://feeds.feedburner.com/~f/DanchoDanchevOnSecurityAndNewMedia?i=1opAYZf" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/DanchoDanchevOnSecurityAndNewMedia?a=ZCVuVtf"><img src="http://feeds.feedburner.com/~f/DanchoDanchevOnSecurityAndNewMedia?i=ZCVuVtf" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/DanchoDanchevOnSecurityAndNewMedia?a=tr11tjF"><img src="http://feeds.feedburner.com/~f/DanchoDanchevOnSecurityAndNewMedia?i=tr11tjF" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/DanchoDanchevOnSecurityAndNewMedia?a=Bg9LMHF"><img src="http://feeds.feedburner.com/~f/DanchoDanchevOnSecurityAndNewMedia?i=Bg9LMHF" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/DanchoDanchevOnSecurityAndNewMedia?a=2H9xyyf"><img src="http://feeds.feedburner.com/~f/DanchoDanchevOnSecurityAndNewMedia?i=2H9xyyf" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/DanchoDanchevOnSecurityAndNewMedia/~4/245530489" height="1" width="1"/>]]></content:encoded>
      <pubDate>Tue, 04 Mar 2008 06:15:20 +0000</pubDate>
      <category domain="http://securityratty.com/tag/iframe">iframe</category>
      <category domain="http://securityratty.com/tag/zdnet asia">zdnet asia</category>
      <category domain="http://securityratty.com/tag/pages">pages</category>
      <category domain="http://securityratty.com/tag/pages redirect">pages redirect</category>
      <category domain="http://securityratty.com/tag/iframe-ed pages">iframe-ed pages</category>
      <category domain="http://securityratty.com/tag/torrentreactor">torrentreactor</category>
      <category domain="http://securityratty.com/tag/iframe-ing tactic remains">iframe-ing tactic remains</category>
      <category domain="http://securityratty.com/tag/seo practices">seo practices</category>
      <category domain="http://securityratty.com/tag/torrentreactor seo practices">torrentreactor seo practices</category>
      <source url="http://feeds.feedburner.com/~r/DanchoDanchevOnSecurityAndNewMedia/~3/245530489/zdnet-asia-and-torrentreactor-iframe-ed.html">ZDNet Asia and TorrentReactor IFRAME-ed</source>
    </item>
    <item>
      <title><![CDATA[A new world order of computing - an analogy of Microsoft and the US]]></title>
      <link>http://securityratty.com/article/692acf4994a1a8ca41ae493b2363a578</link>
      <guid>http://securityratty.com/article/692acf4994a1a8ca41ae493b2363a578</guid>
      <description><![CDATA[A couple of weeks ago Parag Khanna had an article in the NY Sunday Times Magazine called &quot; Waving Goodbye to Hegemony &quot;. I thought this was one of the most important and enlightening articles I have...]]></description>
      <content:encoded><![CDATA[
<div xmlns="http://www.w3.org/1999/xhtml"><p>A couple of weeks ago Parag Khanna had an article in the NY Sunday Times Magazine called &quot;<a href="http://www.nytimes.com/2008/01/27/magazine/27world-t.html?ref=magazine">Waving Goodbye to Hegemony</a>&quot;. I thought this was one of the most important and enlightening articles I have read in years.&nbsp; For me it crystallized up my own thoughts about what is going on in the crazy world we all live in. The gist of the article is that over the first decade of the 21st century we have seen a fundamental shift in the distribution of power in the world.&nbsp; While we were busy fighting a crusade, the so called peace dividend of the post-cold war &quot;new world order&quot; never materialized and the unipolar American hegemony that was going to bring peace, prosperity and democracy to the world never materialized.&nbsp; Instead we find ourselves increasingly in a multi-polar world with two budding new superpowers (could Europe and China really be new?) - the European Union and China, competing very successfully, filling the vacuum we have left in many parts of the world.&nbsp; There has been no lessening of violence or new golden age of mankind. Instead it seems like more of the same old, with the peoples of the world vying for more and more scarce resources.&nbsp; The only thing for sure is certainly we are all interconnected economically more than ever.&nbsp; This presents its own unique challenges and strategies. Who knows how the rest of this century will play out and whether or not it will be another &quot;<a href="http://en.wikipedia.org/wiki/American_Century">American Century</a>&quot; or not.&nbsp; My blog is also not the right forum to explore my feelings on this topic either. <br /><br />However, while reading an article in InfoWorld by Galen Gruman today on whether it is &quot;<a href="http://www.infoworld.com/article/08/02/17/08NF-vista-alternatives_1.html">Time to dump Windows</a>&quot;, I was struck by the parallels (no pun intended with the Mac VM program which enables so much Mac adoption) between Microsoft and the US.&nbsp; Like the US, about 10 or 15 years ago Microsoft was officially declared a monopoly.&nbsp; It was the one true superpower of IT. Yeah, Larry Ellison and Scott McNealy could tweak Bill's nose and drive fast cars, boats and planes, but lets face it they were midgets compared to the Redmond giants.&nbsp; Microsoft rolled over competition like Lotus, Wordperfect and Netscape the way we did Mexico in the US-Mexican war. They even invested in Apple to prop them up as a potential rival like the US did in setting up banana republics. By the late 90's did anyone in the mainstream dare to speak out in public about Microsoft being potentially vulnerable and competing with them? Quite the contrary, companies who found out that Microsoft was entering their space would roll over and die.&nbsp; I didn't think I would live to see in my lifetime so much talk of Microsoft being a dinosaur and not able to compete.<br /><br />But as I <a href="http://www.stillsecureafteralltheseyears.com/ashimmy/2008/02/are-microsofts.html">wrote</a> about last week, it seems articles like Grumans are the topic du jour. It is quite fashionable to say that Microsoft's time as the undisputed alpha dog may be drawing to a close.&nbsp; They are under attack via the SaaS/Web 2.0 space from Google (and who knows what a Google dominated world looks like, it could be the frying pan to the fryer), their OS monopoly is being eroded like a bite out of the apple everday by shiny silver laptops and sleek wide screen monitors.&nbsp; On the server front, Linux continues to capture share. The specter of thin clients running some java based non-windows OS still hangs out there.&nbsp; The list goes on and on.<br /><br />So is it the sunset of the American dynasty and Microsofts?&nbsp; I think not.&nbsp; As I wrote earlier, rumors of their demise are pre-mature. Yes, all things change and one company or country (or political party or sports team for that matter) cannot dominate forever.&nbsp; But just because viable competitors come to the fore, does not mean that great companies or countries shrivel up and die.&nbsp; In fact good competition can drive these old dogs to learn new tricks and become greater than ever.&nbsp; I for one would not vote against either Microsoft or the US in the coming years continuing their pre-eminent positions in the world.</p></div>

<p><a href="http://feeds.feedburner.com/~a/StillsecureAfterAllTheseYears?a=lWJXeb"><img src="http://feeds.feedburner.com/~a/StillsecureAfterAllTheseYears?i=lWJXeb" border="0"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/StillsecureAfterAllTheseYears?a=ts3GjjE"><img src="http://feeds.feedburner.com/~f/StillsecureAfterAllTheseYears?i=ts3GjjE" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/StillsecureAfterAllTheseYears?a=eQIpABE"><img src="http://feeds.feedburner.com/~f/StillsecureAfterAllTheseYears?i=eQIpABE" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/StillsecureAfterAllTheseYears?a=gaApCgE"><img src="http://feeds.feedburner.com/~f/StillsecureAfterAllTheseYears?i=gaApCgE" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/StillsecureAfterAllTheseYears?a=wb04DLE"><img src="http://feeds.feedburner.com/~f/StillsecureAfterAllTheseYears?i=wb04DLE" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/StillsecureAfterAllTheseYears?a=tdkv5KE"><img src="http://feeds.feedburner.com/~f/StillsecureAfterAllTheseYears?i=tdkv5KE" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/StillsecureAfterAllTheseYears?a=tuS9PYE"><img src="http://feeds.feedburner.com/~f/StillsecureAfterAllTheseYears?i=tuS9PYE" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/StillsecureAfterAllTheseYears?a=PCAjD9E"><img src="http://feeds.feedburner.com/~f/StillsecureAfterAllTheseYears?i=PCAjD9E" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/StillsecureAfterAllTheseYears?a=bJ5kc3e"><img src="http://feeds.feedburner.com/~f/StillsecureAfterAllTheseYears?i=bJ5kc3e" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/StillsecureAfterAllTheseYears?a=4iK1HOE"><img src="http://feeds.feedburner.com/~f/StillsecureAfterAllTheseYears?i=4iK1HOE" border="0"></img></a>
</div>]]></content:encoded>
      <pubDate>Mon, 18 Feb 2008 21:24:05 +0000</pubDate>
      <category domain="http://securityratty.com/tag/world">world</category>
      <category domain="http://securityratty.com/tag/microsoft">microsoft</category>
      <category domain="http://securityratty.com/tag/crazy world">crazy world</category>
      <category domain="http://securityratty.com/tag/multi-polar world">multi-polar world</category>
      <category domain="http://securityratty.com/tag/ago microsoft">ago microsoft</category>
      <category domain="http://securityratty.com/tag/century">century</category>
      <category domain="http://securityratty.com/tag/21st century">21st century</category>
      <category domain="http://securityratty.com/tag/drive fast cars">drive fast cars</category>
      <category domain="http://securityratty.com/tag/unipolar american hegemony">unipolar american hegemony</category>
      <source url="http://feeds.feedburner.com/~r/StillsecureAfterAllTheseYears/~3/237134229/a-new-world-ord.html">A new world order of computing - an analogy of Microsoft and the US</source>
    </item>
  </channel>
</rss>
