<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.1.3" -->
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>

<channel>
	<title>techblog</title>
	<link>http://blog.nominet.org.uk/tech</link>
	<description>random technical thoughts from the Nominet technical team</description>
	<pubDate>Fri, 20 Aug 2010 10:48:22 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.1.3</generator>
	<language>en</language>
			<item>
		<title>Verifying ENUM signatures</title>
		<link>http://blog.nominet.org.uk/tech/2010/08/17/verifying-enum-signatures/</link>
		<comments>http://blog.nominet.org.uk/tech/2010/08/17/verifying-enum-signatures/#comments</comments>
		<pubDate>Tue, 17 Aug 2010 13:37:50 +0000</pubDate>
		<dc:creator>Anthony</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[XML]]></category>

		<category><![CDATA[VoIP and ENUM]]></category>

		<category><![CDATA[EPP]]></category>

		<guid isPermaLink="false">http://blog.nominet.org.uk/tech/2010/08/17/verifying-enum-signatures/</guid>
		<description><![CDATA[When an ENUM user sends us a Create command, we validate the XML against the schemas and that the XML signature chain of trust to our CA is OK.  When this doesn&#8217;t work, there isn&#8217;t much feedback that we can return to the user, and it&#8217;s difficult to diagnose what caused the failure.
It&#8217;s possible [...]]]></description>
			<content:encoded><![CDATA[<p>When an ENUM user sends us a <code>Create</code> command, we validate the XML against the schemas and that the XML signature chain of trust to our CA is OK.  When this doesn&#8217;t work, there isn&#8217;t much feedback that we can return to the user, and it&#8217;s difficult to diagnose what caused the failure.</p>
<p>It&#8217;s possible to validate a signature with <a href="http://www.oxygenxml.com">oXygen</a> but all that says is &#8220;Invalid Signature&#8221; if there&#8217;s an error.</p>
<p>So I&#8217;ve put together some Java code which produces a bit more diagnostics; see <a href="http://blog.nominet.org.uk/tech/wp-content/uploads/2010/08/validateenumcreatejava.zip">ValidateEnumCreateJava.zip</a> (or <a href="http://blog.nominet.org.uk/tech/wp-content/uploads/2010/08/validateenumcreatejar.zip">as a .jar file</a> if you don&#8217;t have a Java compiler)</p>
<h2>Before you start</h2>
<p>I recommend doing an XML validity check first: don&#8217;t waste time trying to debug XML signature problems if you haven&#8217;t.</p>
<p>One way to do this is to use Sun&#8217;s Multi Schema Validator - <a href="https://msv.dev.java.net/" title="https://msv.dev.java.net/" target="_blank">https://msv.dev.java.net/</a> as suggested in the README in our <a href="http://www.nominet.org.uk/enum/enumregistrarsystems/epp/schemas/">schema bundles</a>, i.e.<code><br />
java -jar /path/to/msv.jsr /path/to/nom-enum-root-2.0.xsd your_file.xml<br />
</code></p>
<h2>Running the ENUM signature checker</h2>
<ul>
<li>compile as:<br />
<code><br />
javac ValidateEnumCreate.java<br />
</code></li>
</ul>
<ul>
<li>run as:<br />
<code><br />
java ValidEnumCreate &lt;yourfile&gt;<br />
</code></li>
</ul>
<p>or if you don&#8217;t have a Java compiler&#8230;</p>
<ul>
<li>run from <a href="http://blog.nominet.org.uk/tech/wp-content/uploads/2010/08/validateenumcreatejar.zip">a .jar file</a>:<br />
<code><br />
java -jar ValidEnumCreate.jar &lt;yourfile&gt;<br />
</code></li>
</ul>
<h2>Results:</h2>
<h4>Valid Signature</h4>
<p>If all is well, the result should be</p>
<p><code>Signature Validated OK</code></p>
<p>The response for an invalid signature depends on what was wrong:</p>
<h4>Bad DigestValue</h4>
<p>If the digest is different but the signature of that digest is correct, the result will be</p>
<pre>Signature 0 failed core validation:

Checking that the digest matches the data:
FAIL: DigestValue does not match data
&nbsp;&nbsp;&nbsp;&nbsp;(Signature 0 ref[&#8217;0&#8242;] validity status: false)

Checking the signature of the digest:
PASS: SignatureValue verifies DigestValue
&nbsp;&nbsp;&nbsp;&nbsp;(Signature 0 validation status: true)
</pre>
<p>This is possibly due to munging of whitespace.  The signed XML is fragile and even sensitive to changes in whitespace between tags (I commented on this in an <a href="http://blog.nominet.org.uk/tech/2009/03/27/signing-enum-xml-tokens/">earlier</a> blog article)</p>
<h4>Bad Signature or certificate</h4>
<p>If the signature is invalid or the wrong certificate is included, the results will be:</p>
<pre>
Signature 0 failed core validation:

Checking that the digest matches the data:
PASS: DigestValue matches data
&nbsp;&nbsp;&nbsp;&nbsp;(Signature 0 ref[&#8217;0&#8242;] validity status: true)

Checking the signature of the digest:
FAIL: SignatureValue does not verify DigestValue
&nbsp;&nbsp;&nbsp;&nbsp;(Signature 0 validation status: false)
</pre>
<h5>Other errors</h5>
<ul>
<li>Failure to parse the XML - error message</li>
<li>Failure to decode the Digest/Signature/Certificate - Java exception + stack trace</li>
</ul>
<h4>References</h4>
<p><a href="http://jtute.com/java6/0904.html">http://jtute.com/java6/0904.html</a><br />
<a href="http://java.sun.com/developer/technicalArticles/xml/dig_signature_api/">http://java.sun.com/developer/technicalArticles/xml/dig_signature_api/</a><br />
<a href="http://weblogs.java.net/blog/mullan/archive/2006/01/my_xml_signatur_1.html">http://weblogs.java.net/blog/mullan/archive/2006/01/my_xml_signatur_1.html</a><br />
<a href="http://weblogs.java.net/blog/2007/08/03/even-more-xml-signature-debugging-tips">http://weblogs.java.net/blog/2007/08/03/even-more-xml-signature-debugging-tips</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nominet.org.uk/tech/2010/08/17/verifying-enum-signatures/feed/</wfw:commentRss>
		</item>
		<item>
		<title>DNS RFC Dependency Graphs</title>
		<link>http://blog.nominet.org.uk/tech/2010/05/24/436/</link>
		<comments>http://blog.nominet.org.uk/tech/2010/05/24/436/#comments</comments>
		<pubDate>Mon, 24 May 2010 10:52:48 +0000</pubDate>
		<dc:creator>ray</dc:creator>
		
		<category><![CDATA[DNS]]></category>

		<guid isPermaLink="false">http://blog.nominet.org.uk/tech/2010/05/24/436/</guid>
		<description><![CDATA[Spurred by a recent Slashdot posting, I&#8217;ve produced some graphs showing the relationships between the RFCs which define the DNS protocol.
The graphs (which are in SVG format) split the DNS-related RFCs into three groups (although some RFCs end up in more than one group):

Core Protocol RFCs
Resource Record Definitions
DNS Operational Guidelines

The point of these graphs is [...]]]></description>
			<content:encoded><![CDATA[<p>Spurred by a recent <a href="http://ask.slashdot.org/article.pl?sid=10/05/02/2053207">Slashdot posting</a>, I&#8217;ve produced some graphs showing the relationships between the RFCs which define the DNS protocol.</p>
<p>The graphs (which are in SVG format) split the DNS-related RFCs into three groups (although some RFCs end up in more than one group):</p>
<ul>
<li><a href="http://download.nominet.org.uk/rfcdeps/svg/dnsproto.svg">Core Protocol RFCs</a></li>
<li><a href="http://download.nominet.org.uk/rfcdeps/svg/dnsrr.svg">Resource Record Definitions</a></li>
<li><a href="http://download.nominet.org.uk/rfcdeps/svg/dnsop.svg">DNS Operational Guidelines</a></li>
</ul>
<p>The point of these graphs is not to show which RFCs <em>refer</em> to other RFCs, but to show which RFCs <em>update</em> or <em>obsolete</em> other RFCs.  Hence the graphs give an &#8220;at a glance&#8221; overview of which RFCs define the DNS protocol as it is now.</p>
<p>Boxes in grey indicate obsoleted RFCs, and square boxes indicate <em>Informational</em> or <em>Best Current Practice</em> documents.  Hovering over a box should tell you the title of the RFC, and clicking on a box will take you to the RFC itself.</p>
<p>The picture below is just a low resolution sample - click on the picture or on the links above to access the scalable SVG versions.</p>
<p><a href="http://download.nominet.org.uk/rfcdeps/svg/dnsproto.svg"><img src="http://download.nominet.org.uk/rfcdeps/thumbs/dnsproto.png" title="DNS Protocol Graph" alt="DNS Protocol Graph" border="0" height="338" width="741" /></a></p>
<p>Please let me know if you believe I&#8217;ve missed anything, or miscategorised any document.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nominet.org.uk/tech/2010/05/24/436/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Multithreading and first come, first served</title>
		<link>http://blog.nominet.org.uk/tech/2010/03/15/multithreading-and-first-come-first-served/</link>
		<comments>http://blog.nominet.org.uk/tech/2010/03/15/multithreading-and-first-come-first-served/#comments</comments>
		<pubDate>Mon, 15 Mar 2010 17:23:40 +0000</pubDate>
		<dc:creator>charles</dc:creator>
		
		<category><![CDATA[process]]></category>

		<category><![CDATA[EPP]]></category>

		<guid isPermaLink="false">http://blog.nominet.org.uk/tech/2010/03/15/multithreading-and-first-come-first-served/</guid>
		<description><![CDATA[A recent query from a registrar has prompted the Registrar Systems Support team to take a close look at how our EPP system works with Nominet&#8217;s first come, first served approach.  The nature of our EPP service makes this challenging to apply and it may not be applied in the way you expect.
If we [...]]]></description>
			<content:encoded><![CDATA[<p>A recent query from a registrar has prompted the Registrar Systems Support team to take a close look at how our EPP system works with Nominet&#8217;s first come, first served approach.  The nature of our EPP service makes this challenging to apply and it may not be applied in the way you expect.</p>
<p>If we look at Nominet&#8217;s EPP service, the &#8220;EPP server&#8221; itself is actually multiple load balanced servers, operating multithreaded processes.  These communicate with xml translation hardware also through load balancers, and also communicate with a database.  A combination of factors can cause a difference in the sequence that transactions are acted upon.  These include: </p>
<ol>
<li>which EPP server the request goes to</li>
<li>thread scheduling (at the operating system level) in the specific EPP server</li>
<li>which piece of hardware the xml load balancers select</li>
<li>scheduling of translation requests within the xml hardware</li>
<li>internal scheduling within the database</li>
</ol>
<p>When you look at how EPP handles requests over &#8220;large&#8221; periods of time, EPP is clearly a first come, first served system.  However because of the nature of multithreaded systems, it is not feasible (or desirable) to apply that principle when the period of time is a handful of milliseconds.  Most of the advantages that EPP has over the Automaton stem from the fact that it is  multithreaded and acts on requests in parallel.</p>
<p>The principle behind first come first served is that no party is given preferential treatment when registering a domain name.  We do not shape our traffic and no registrar is given any sort of priority when our EPP system processes a request.  We apply first come first served based on when the first valid request gets committed to the database.  We must do this as we operate three different registration systems.</p>
<p>For registrars who work in an environment where milliseconds can mean the difference between successfully registering a domain name or not, this may be significant when deciding how your EPP client communicates with Nominet.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nominet.org.uk/tech/2010/03/15/multithreading-and-first-come-first-served/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Can Cloud computing be a threat for security?</title>
		<link>http://blog.nominet.org.uk/tech/2009/11/19/can-cloud-computing-be-a-threat-for-security/</link>
		<comments>http://blog.nominet.org.uk/tech/2009/11/19/can-cloud-computing-be-a-threat-for-security/#comments</comments>
		<pubDate>Thu, 19 Nov 2009 12:20:36 +0000</pubDate>
		<dc:creator>alessandro</dc:creator>
		
		<category><![CDATA[whois]]></category>

		<category><![CDATA[data analysis]]></category>

		<guid isPermaLink="false">http://blog.nominet.org.uk/tech/2009/11/19/can-cloud-computing-be-a-threat-for-security/</guid>
		<description><![CDATA[A cloud refers to “the provision of dynamically scalable and often virtualized resources as a service over the Internet” (from Wikipedia). In practice, a user that logs in a cloud service (the bottom of this page lists some of them), for a reasonable price, can rent “resources” such as disk space or virtual machines to [...]]]></description>
			<content:encoded><![CDATA[<p>A cloud refers to “the provision of dynamically scalable and often virtualized resources as a service over the Internet” (from <a href="http://en.wikipedia.org/wiki/Cloud_computing)">Wikipedia</a>). In practice, a user that logs in a cloud service (the bottom of <a href="http://en.wikipedia.org/wiki/Cloud_computing)">this page</a> lists some of them), for a reasonable price, can rent “resources” such as disk space or virtual machines to run his own code.</p>
<p>Recently, I have been monitoring the queries coming to our <a href="http://www.nominet.org.uk/other/whois/">WHOIS service</a>  and have noticed that several requests were originated by machines belonging to the IP space of a well-known commercial cloud. Since the WHOIS is a free service and can be run from any machine, I strongly suspect this technique has been used to avoid hitting the limit of 1000 queries/day set by <a href="http://www.nominet.org.uk/other/whois/aup/">Nominet&#8217;s Acceptable Use Policy</a> on a per user basis (and not per IP).</p>
<p>The impact of this episode, as far as I can see, is limited and, maybe, not worth too much attention. What is interesting, however, is the way the cloud has been used to circumvent Nominet&#8217;s rules. This rises questions about how easy it would be for a malicious user to exploit a cloud computing environment for illegal activities and how long shall we wait before the first large-scale attack based on this technology is reported.</p>
<p>If we consider how the cloud environment works, we realise that:</p>
<ul>
<li>A cloud gives a malicious user access to a virtually unlimited pool of resources and computing power</li>
<li>It is difficult to enforce limits on the amount of resources a single user is allowed to control, because this would harm legimitate users, without preventing malicious ones to open multiple accounts</li>
<li>Monitoring all processes and activities that run on the cloud is quite complex, maybe impractical. Besides, I don&#8217;t think legitimate users would be happy with service providers inspecting their data. They will be forced to use cryptography, which will make things even worse</li>
<li>Assuming that a service provider could offer some level of protection from misuses of their service, malicious users could spread their activities across different cloud providers, making the task of early detection very complex.</li>
<li>Finally, accessing cloud services is cheap and prices are expected to drop with the technology behind big data centres becoming more accessible.</li>
</ul>
<p>The security issues associated to cloud computing are not unknown (recently, for example, <a href="http://searchsecurity.techtarget.com.au/news/36967-Criminals-use-Google-s-cloud-computing-facilities-to-host-botnet-control-application">botnet controllers have been discovered in the Google cloud</a>), the problem is that this kind of attacks and  the threat associated to them are likely to increase in the coming years.</p>
<p>Defending from a cloud-based attack might not be easy and will need to rely on the “good will” of  the cloud service providers, which will be expected to monitor their users activities. And, to cite Joze Nazario, from Arbor Networks in a <a href="http://www.theregister.co.uk/2009/11/09/bot_herders_coopt_google_appengine/">recent interview to The Register</a>, “going to a company as big as Google and saying &#8216;Can we get an image of that server,&#8217; that&#8217;s a pretty high barrier”. Especially for small-medium organisations affected by a small/medium -sized attacks.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nominet.org.uk/tech/2009/11/19/can-cloud-computing-be-a-threat-for-security/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Mutation Testing with Jumble</title>
		<link>http://blog.nominet.org.uk/tech/2009/09/28/mutation-testing-with-jumble/</link>
		<comments>http://blog.nominet.org.uk/tech/2009/09/28/mutation-testing-with-jumble/#comments</comments>
		<pubDate>Mon, 28 Sep 2009 09:26:55 +0000</pubDate>
		<dc:creator>chris</dc:creator>
		
		<category><![CDATA[Java]]></category>

		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://blog.nominet.org.uk/tech/2009/09/28/mutation-testing-with-jumble/</guid>
		<description><![CDATA[Mutation testing is a technique for checking how good your unit tests are.  It mutates a class by for example swapping a subtraction for an addition or by negating an if statement.  It then runs the unit tests for that class.  If none of them fail, then maybe your tests are not good enough.
We took [...]]]></description>
			<content:encoded><![CDATA[<p>Mutation testing is a technique for checking how good your unit tests are.  It mutates a class by for example swapping a subtraction for an addition or by negating an if statement.  It then runs the unit tests for that class.  If none of them fail, then maybe your tests are not good enough.</p>
<p>We took a look at Java mutation testing tools some time ago as a possible addition to our continuous integration system.  But at that time the tools fell short.  <a href="http://jester.sourceforge.net/">Jester</a> works by mutating the source files.  We found that this was just too slow with all the compilation it needs to do.  <a href="http://jumble.sourceforge.net/">Jumble</a> is a bit smarter in that it mutates the bytecode of the compiled class files.  However, when we evaluated it only <a href="http://www.junit.org">JUnit</a> 3 tests were supported and we were already well on the way to transitioning most of our tests to JUnit 4.</p>
<p>Recently though, Jumble was modified to work with JUnit 4 tests, so I thought it was time to take another look at it.  I found it quite tricky to get it working as there is no <a href="http://ant.apache.org/">ant</a> integration and it only runs as a command line application.  However, with a bit of persuasion I managed to get it running over our codebase using ant.  The details of how I did this are given below, but I think that a better solution would definitely be a <a href="http://ant.apache.org/manual/develop.html">fully fledged custom ant task</a>.</p>
<p>So how did I get on?  Initially I had some niggly classloader problems. It seems that you need to tell Jumble&#8217;s mutating classloader to defer the loading of various sets of classes to the default classloader.  I needed to do this for the <a href="http://java.sun.com/javase/technologies/core/mntr-mgmt/javamanagement/">JMX</a> classes found under javax.management by specifying the command line flag <code>--defer-class=javax.management. </code> Once I&#8217;d done this I had it working and did indeed find some interesting things.  I found tests that had been cut-and-pasted and not changed to test what they claimed to test. I found some test data that wasn&#8217;t up to the job and I found an actual bug in the code.</p>
<p>However, I hit a roadblock once the code under test used a database.  For some reason Oracle&#8217;s JDBC driver would not behave. Even before any mutations were applied it would insist on trying to connect with a null password.  This meant that it tried a number of times before locking itself out of the database.  I assume that this is some kind of classloader thing, but it seems strange that it manages to successfully contact the database only to completely mess up the credentials.  I&#8217;ve contacted the developers of Jumble (who are based in New Zealand incidentally), but no solution has been forthcoming as yet.  Until this problem is fixed we won&#8217;t be able to add this to our continuous integration system, which is a shame, as I think it could be a useful tool.</p>
<p>So, how did I integrate Jumble into ant?  I used the follow <a href="http://ant.apache.org/manual/CoreTasks/macrodef.html">macrodef</a> to run Jumble:</p>
<pre>&lt;macrodef name="do-mutation"&gt;
    &lt;attribute name="class-to-mutate"/&gt;
    &lt;sequential&gt;

        &lt;!-- Use this trick to convert a reference to a classpath to classpath as a string --&gt;
        &lt;property name="the-classpath-as-a-string" refid="execute-test-classpath"/&gt;        

        &lt;java dir="${base.directory}" classname="com.reeltwo.jumble.Jumble" fork="true"&gt;

            &lt;!-- all we really need in this classpath is the jumble library --&gt;
            &lt;classpath refid="ants-own-classpath"/&gt;

            &lt;!-- but then it needs everything in the JVM it forks: --&gt;
            &lt;arg value="--classpath=${the-classpath-as-a-string}"/&gt;
            &lt;arg value="--exclude=equals,hashCode,toString"/&gt;
            &lt;arg value="--defer-class=javax.management."/&gt;
            &lt;arg value="@{class-to-mutate}" /&gt;
        &lt;/java&gt;

    &lt;/sequential&gt;

&lt;/macrodef&gt;</pre>
<p>To get this to work you will need the classpath used to run the tests set up with the id <code>execute-test-classpath</code> and the classpath used by ant to find custom tasks set up with the id <code>ants-own-classpath</code>.  The latter will need to include the jumble jar.  As you can see I have excluded the <code>equals(), hashcode()</code> and <code>toString()</code> methods from being mutated as the first two are often generated by the IDE anyway. In the case of toString, this rarely contains important logic.  As mentioned before, the JMX classes are deferred to the default classloader. You may need to add some other packages to get it to work in your environment.</p>
<p>The above macrodef will mutate a single class.  But we want to run this across our whole code base.  To do this I had to resort to using some further ant tricks in the shape of the <a href="http://ant-contrib.sourceforge.net/">ant-contrib library</a> which adds additional functionality to ant.  As I said before, a better solution would be to write a proper ant task.  Here is how the macrodef is called to run Jumble over a whole project:</p>
<pre>&lt;target name="mutation.test"&gt;    

    &lt;!-- The ant contrib jar contains the "for" task --&gt;
    &lt;taskdef resource="net/sf/antcontrib/antlib.xml" classpathref="ants-own-classpath"/&gt;

    &lt;!-- Strip off the leading directory and the .class. Then replace the slashes
         with dots and separate each one with a comma.
         Results go into the classlist property --&gt;

    &lt;pathconvert dirsep="." pathsep="," property="classlist"&gt;
        &lt;mapper type="glob" from="${build.dir}/*.class" to="*"/&gt;
        &lt;fileset refid="classes-to-mutate"/&gt;
    &lt;/pathconvert&gt;

    &lt;!-- Iterate through the comma separated list and call jumble --&gt;
    &lt;for list="${classlist}" param="class"&gt;
        &lt;sequential&gt;
            &lt;do-mutation class-to-mutate="@{class}"/&gt;
        &lt;/sequential&gt;
    &lt;/for&gt;

&lt;/target&gt;</pre>
<p>This takes a fileset with id <code>classes-to-mutate</code> which consists of classes under the directory <code>${build.dir}</code>.  It turns the path into a package and removes the .class from the end to get a list of classes to mutate.  (NB This was written to work with Unix style paths, it may need alteration to work under Windows). Then the macrodef given previously is called for each. Note that we refer to the <code>ants-own-classpath</code> classpath again which must contain the ant contrib jar this time.  The code given above was put in a standard ant build file included by other projects. The fileset to mutate could then be defined in each like this:</p>
<pre>&lt;fileset id="classes-to-mutate" dir="${build.dir}" includes="**/*.class"&gt;
        &lt;exclude name="**/WeWantToLeaveThisOut.class"/&gt;
&lt;/fileset&gt;</pre>
<p><strong>UPDATE: </strong> The story gets even weirder.  One of the Jumble developers got back to me with a suggestion for how to fix the Oracle problem, which was to add the JDBC driver to the list of classes deferred to the parent classloader.  This didn&#8217;t help, but I then discovered bizarrely that the JDBC problem goes away if you are connecting to an 11g database as opposed to a 10g one.  So it means that somehow the 10g JDBC driver fails to connect to 10g when run by Jumble, but succeeds against a later version.  Curiouser and curiouser&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nominet.org.uk/tech/2009/09/28/mutation-testing-with-jumble/feed/</wfw:commentRss>
		</item>
		<item>
		<title>evldns - A Framework for Light-weight DNS Servers</title>
		<link>http://blog.nominet.org.uk/tech/2009/08/10/evldns-a-framework-for-light-weight-dns-servers/</link>
		<comments>http://blog.nominet.org.uk/tech/2009/08/10/evldns-a-framework-for-light-weight-dns-servers/#comments</comments>
		<pubDate>Mon, 10 Aug 2009 10:04:54 +0000</pubDate>
		<dc:creator>ray</dc:creator>
		
		<category><![CDATA[DNS]]></category>

		<guid isPermaLink="false">http://blog.nominet.org.uk/tech/2009/08/10/evldns-a-framework-for-light-weight-dns-servers/</guid>
		<description><![CDATA[I&#8217;ve recently written and released source code for &#8220;evldns&#8221;.
evldns is a software mashup - it takes libevent&#8217;s fast event processing code and combines it with ldns&#8217;s DNS packet handling.  It&#8217;s derived from the server-side half of libevent&#8217;s &#8220;evdns&#8221; component.
The resulting framework is particularly intended for writing servers which generate custom responses.  Examples included are:

an [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve recently written and <a href="http://code.google.com/p/evldns/" target="_blank">released</a> source code for &#8220;evldns&#8221;.</p>
<p>evldns is a software mashup - it takes <a href="http://monkey.org/~provos/libevent/" target="_blank">libevent&#8217;s</a> fast event processing code and combines it with <a href="http://www.nlnetlabs.nl/projects/ldns/" target="_blank">ldns&#8217;s</a> DNS packet handling.  It&#8217;s derived from the server-side half of libevent&#8217;s &#8220;evdns&#8221; component.</p>
<p>The resulting framework is particularly intended for writing servers which generate custom responses.  Examples included are:</p>
<ul>
<li>an <a href="http://public.as112.net/" target="_blank">AS112</a> server which has been benchmarked at over 60,000 queries per second on an HP DL385 server.</li>
<li>a server which responds with the IP address of the client which sent the query - this can be useful for network discovery</li>
</ul>
<p>The framework could also be used to write a &#8220;fuzzing&#8221; DNS server - one that deliberately returns malformed responses so as to trigger and test for bugs in DNS clients.</p>
<p>Here&#8217;s an extract from the package&#8217;s README:</p>
<blockquote><p>evldns works using callback functions.  A list of packet matching patterns<br />
may be registered, along with a pointer to the function that will be<br />
invoked when each pattern is matched.</p>
<p>The packet match works on the usual DNS triple of (QNAME, QCLASS, QTYPE)<br />
where QNAME may be an exact match or a wildcard, and QCLASS or QTYPE may<br />
be &#8220;ANY&#8221;.</p>
<p>The callback function is passed two parameters:</p>
<p><code>void callback(struct evldns_server_request *req, void *data)</code></p>
<p>The &#8220;req&#8221; parameter contains the complete received DNS request as an<br />
&#8220;ldns_pkt&#8221;.  The callback should create a response packet and populate<br />
&#8220;req&#8221; with that response, which may either be in raw wire format<br />
(<code>req-&gt;wire_response</code> and <code>req-&gt;wire_len</code>) or in ldns format (<code>req-&gt;response</code>).</p>
<p>If the callback function fails to populate either of the response fields<br />
then the evldns system will pass the received packet onto the next<br />
matching callback.</p>
<p>Should no callback match then evldns will automatically generate and<br />
return a packet with RCODE = 5 (Refused).</p>
<p>The &#8220;data&#8221; parameter is used to pass an additional parameter supplied when<br />
the callback function was registered.  See &#8220;mod_txtrec.c&#8221; for an example<br />
of how &#8220;data&#8221; may be used to pass expected response data into a callback.</p>
<p>A complete evldns application requires just a few lines of code:<br />
<code><br />
event_init();			/* initialise libevent */<br />
evldns_init();			/* initialise evldns */</code></p>
<p><code>/* create an evldns server context */<br />
struct evldns_server *server = evldns_add_server();</code></p>
<p><code>/* register a UDP socket with evldns */<br />
evldns_add_server_port(server, bind_to_udp4_port(53));</code></p>
<p><code>/* register callbacks here */<br />
evldns_add_callback(server, qname, qclass, qtype, callback, data);<br />
...</code></p>
<p><code>/* and set libevent running */<br />
event_dispatch();</code></p></blockquote>
<p>Please see the project <a href="http://code.google.com/p/evldns/" target="_blank">home page</a> for more information.  There is also a Google hosted <a href="http://groups.google.com/group/evldns-users" target="_blank">discussion group</a>.</p>
<p>Ray Bellis, Advanced Projects Team</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nominet.org.uk/tech/2009/08/10/evldns-a-framework-for-light-weight-dns-servers/feed/</wfw:commentRss>
		</item>
		<item>
		<title>WHOIS lookups and domain name registrations follow news events</title>
		<link>http://blog.nominet.org.uk/tech/2009/06/30/whois-lookups-and-domain-name-registrations-follow-news-events/</link>
		<comments>http://blog.nominet.org.uk/tech/2009/06/30/whois-lookups-and-domain-name-registrations-follow-news-events/#comments</comments>
		<pubDate>Tue, 30 Jun 2009 13:11:16 +0000</pubDate>
		<dc:creator>alessandro</dc:creator>
		
		<category><![CDATA[DNS]]></category>

		<category><![CDATA[whois]]></category>

		<category><![CDATA[data analysis]]></category>

		<guid isPermaLink="false">http://blog.nominet.org.uk/tech/2009/06/30/whois-lookups-and-domain-name-registrations-follow-news-events/</guid>
		<description><![CDATA[The day following the death of Michael Jackson, Google published a graph showing that their system were heavily hit by queries related to this news. Details can be found on the Google Official Blog.
Our experiments suggest that Nominet systems experienced an analogous, although orders of magnitude smaller, phenomenon. The following figures show the number of [...]]]></description>
			<content:encoded><![CDATA[<p>The day following the death of Michael Jackson, Google published a graph showing that their system were heavily hit by queries related to this news. Details can be found on the <a href="http://googleblog.blogspot.com/2009/06/outpouring-of-searches-for-late-michael.html" rel="nofollow" linktype="raw" wikidestination="http://googleblog.blogspot.com/2009/06/outpouring-of-searches-for-late-michael.html" aliasspecified="true">Google Official Blog</a>.</p>
<p>Our experiments suggest that Nominet systems experienced an analogous, although orders of magnitude smaller, phenomenon. The following figures show the number of new registrations per hour of domain names that contain the name of Michael Jackson (or part of it) and the number of WHOIS queries that Nominet systems received in the same period.</p>
<p><a href="http://blog.nominet.org.uk/tech/wp-content/uploads/2009/06/michaeljackson-no-labels.jpg" title="Michael Jackson Graphs"><img src="http://blog.nominet.org.uk/tech/wp-content/uploads/2009/06/michaeljackson-no-labels.jpg" title="Michael Jackson Graphs" alt="Michael Jackson Graphs" align="middle" border="1" width="693" height="231" /></a></p>
<p>The two graphs are highly correlated because it is common practice for domain name owners to make WHOIS lookups around the period of time they register new domains. The peak around the 27 of June in the second graph is probably related to news stories concerning suspicions about Michael&#8217;s death.  Apparently, it did not lead to an immediate rise in the number of domain name registrations.</p>
<p user="true" style="display: none">&nbsp;</p>
<p>We have conducted an informal analysis of the domain names that were registered in the last week. The majority of them belong to three categories: parking pages, commercial pages and commemorative sites such as blogs and forums. At the moment, we have no evidence of domain names <a href="http://www.computerworld.com/action/article.do?command=viewArticleBasic&amp;articleId=9134895" rel="nofollow" linktype="raw" wikidestination="http://www.computerworld.com/action/article.do?command=viewArticleBasic&amp;articleId=9134895" aliasspecified="true">used for scam or phishing</a>.</p>
<p user="true" style="display: none">&nbsp;</p>
<p>In general, this episode confirms (again) that the dynamics of the Domain Name System follow those of the &#8220;real world&#8221;. A question that is still partially unanswered is at which degree these dynamics are followed by Internet users, i.e. how much their navigation behaviour depends on news stories. In the following months we plan to study the correlation between DNS data and other public events. Google has done something similar in the past, by correlating <a href="http://www.google.org/flutrends/" rel="nofollow" linktype="raw" wikidestination="http://www.google.org/flutrends/" aliasspecified="true">Google searches for flu-related terms with the spread of flu in North America</a>. The results are very interesting and definitely merit extension to other data sources such as DNS traffic.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nominet.org.uk/tech/2009/06/30/whois-lookups-and-domain-name-registrations-follow-news-events/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Typo-Squatting: The &#8220;Curse&#8221; of Popularity</title>
		<link>http://blog.nominet.org.uk/tech/2009/06/24/typo-squatting-the-curse-of-popularity/</link>
		<comments>http://blog.nominet.org.uk/tech/2009/06/24/typo-squatting-the-curse-of-popularity/#comments</comments>
		<pubDate>Wed, 24 Jun 2009 09:30:51 +0000</pubDate>
		<dc:creator>alessandro</dc:creator>
		
		<category><![CDATA[Anti-Spam]]></category>

		<category><![CDATA[Conferences]]></category>

		<category><![CDATA[papers]]></category>

		<category><![CDATA[typosquatting]]></category>

		<guid isPermaLink="false">http://blog.nominet.org.uk/tech/2009/06/24/typo-squatting-the-curse-of-popularity/</guid>
		<description><![CDATA[Typo-squatting is the practice of registering a domain name with the intent to confuse it with the name of a trademark or a famous other domain name
In March, I presented the paper Typo-Squatting: The &#8220;Curse&#8221; of Popularity in the poster session of the first International Conference on Web Science in Athens. The paper, written together [...]]]></description>
			<content:encoded><![CDATA[<p>Typo-squatting is the practice of registering a domain name with the intent to confuse it with the name of a trademark or a famous other domain name</p>
<p>In March, I presented the paper <em>Typo-Squatting: The &#8220;Curse&#8221; of Popularity</em> in the poster session of the first International Conference on Web Science in Athens. The paper, written together with co-authors <a href="http://cms.brookes.ac.uk/staff/DavidDuce/">David Duce</a> and <a href="http://cms.brookes.ac.uk/staff/FayeMitchell/">Faye Mitchell</a> (Oxford Brookes University) and Stephen Morris (Nominet) can be downloaded <a href="http://blog.nominet.org.uk/tech/wp-content/uploads/2009/06/full-paper-websci09.pdf" title="WebSci09 - Full Paper">here</a>.</p>
<p>In the paper we study typo-squatting from a statistical point of view. The distribution of names in the <em>co.uk</em> registry is analysed using the concepts of syntactic and visual neighbourhoods of a domain name (the sets of all other domain names which are syntactically or visually similar to to it).  Our preliminary results show a strong correlation between the popularity of a domain name and the size of its syntactical and visual neighbourhoods although, counter-intuitively, the neighbourhood size does not depend on length.  This suggests anomalous activity &#8220;around&#8221; very popular domain names, as well as indicating that the size of the neighbourhood can be used as a reliable indicator for the likelihood of being typo-squatted.<br />
<a href="http://blog.nominet.org.uk/tech/wp-content/uploads/2009/06/full-paper-websci09.pdf" title="WebSci09 - Full Paper"></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nominet.org.uk/tech/2009/06/24/typo-squatting-the-curse-of-popularity/feed/</wfw:commentRss>
		</item>
		<item>
		<title>ENUM for Google Android</title>
		<link>http://blog.nominet.org.uk/tech/2009/06/23/enum-for-google-android/</link>
		<comments>http://blog.nominet.org.uk/tech/2009/06/23/enum-for-google-android/#comments</comments>
		<pubDate>Tue, 23 Jun 2009 11:28:36 +0000</pubDate>
		<dc:creator>ray</dc:creator>
		
		<category><![CDATA[DNS]]></category>

		<category><![CDATA[Java]]></category>

		<category><![CDATA[Applications]]></category>

		<category><![CDATA[VoIP and ENUM]]></category>

		<guid isPermaLink="false">http://blog.nominet.org.uk/tech/2009/06/23/enum-for-google-android/</guid>
		<description><![CDATA[I&#8217;m pleased to announce the release of enumdroid.
This application adds ENUM (E.164 Number Mapping) support to your Android phone.
Each time you dial a full international number (i.e. starting with a &#8216;+&#8217;) your phone will check the DNS for additional routing information and offer you a list of alternate contact methods.
The application is open source (under [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m pleased to announce the release of <a href="http://code.google.com/p/enumdroid/">enumdroid</a>.</p>
<p>This application adds ENUM (E.164 Number Mapping) support to your Android phone.</p>
<p>Each time you dial a full international number (i.e. starting with a &#8216;+&#8217;) your phone will check the DNS for additional routing information and offer you a list of alternate contact methods.</p>
<p>The application is open source (under the Apache License) and the code is available for download from <a href="http://code.google.com/p/enumdroid/source/browse/#svn/trunk" target="_blank">Google Code</a>.  The application can be downloaded from the Google Market under Applications -&gt; Communication</p>
<p>Here are some screenshots, which show in turn:</p>
<ol>
<li>Nominet&#8217;s switchboard number being dialled</li>
<li>ENUM results being returned</li>
<li>A call being placed over the PSTN to a tel: URI</li>
<li>The ENUM application&#8217;s settings page</li>
</ol>
<table cellspacing="8">
<tr>
<td><img src="http://enumdroid.googlecode.com/svn/trunk/images/enumdroid-01.png" title="Dialing" alt="Dialing" height="240" width="160" /></td>
<td><img src="http://enumdroid.googlecode.com/svn/trunk/images/enumdroid-02.png" title="ENUM results" alt="ENUM results" height="240" width="160" /></td>
<td><img src="http://enumdroid.googlecode.com/svn/trunk/images/enumdroid-03.png" title="Calling" alt="Calling" height="240" width="160" /></td>
<td><img src="http://enumdroid.googlecode.com/svn/trunk/images/enumdroid-04.png" title="Settings" alt="Settings" height="240" width="160" /></td>
</tr>
</table>
]]></content:encoded>
			<wfw:commentRss>http://blog.nominet.org.uk/tech/2009/06/23/enum-for-google-android/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Notes from UXLondon</title>
		<link>http://blog.nominet.org.uk/tech/2009/06/22/notes-from-uxlondon/</link>
		<comments>http://blog.nominet.org.uk/tech/2009/06/22/notes-from-uxlondon/#comments</comments>
		<pubDate>Mon, 22 Jun 2009 12:58:06 +0000</pubDate>
		<dc:creator>Al</dc:creator>
		
		<category><![CDATA[Conferences]]></category>

		<guid isPermaLink="false">http://blog.nominet.org.uk/tech/2009/06/22/notes-from-uxlondon/</guid>
		<description><![CDATA[Last week I attended the user experience conference UXLondon organised by Clearleft, with a solid day of keynote talks, followed by two days of half-day workshops.
In brief summary the conference highlighted several key points:

How we should work with the customer at all stages to ensure both designer and customer are working towards the same goals.
Developing [...]]]></description>
			<content:encoded><![CDATA[<p>Last week I attended the user experience conference <a href="http://uxlondon.com/">UXLondon</a> organised by <a href="http://clearleft.com/">Clearleft</a>, with a solid day of keynote talks, followed by two days of half-day workshops.</p>
<p>In brief summary the conference highlighted several key points:</p>
<ul>
<li>How we should work with the customer at all stages to ensure both designer and customer are working towards the same goals.</li>
<li>Developing software that is intuitive, aligned with user behaviour, can really make a software product stand out from it&#8217;s competitors.</li>
<li>How using prototypes before starting development can really help iron out usability bugs before investing too much time and expense.</li>
<li>Designing good interfaces for complex systems is hard!</li>
</ul>
<p>My own detailed notes can be found in &#8220;<a href="http://alpower.com/2009/06/22/uxlondon-notes-on-user-experience-and-design/">UXLondon – Notes on User Experience and Design</a>&#8221; (with one of the presentations embedded), where I talk more about what I personally learnt and what I thought of the individual sessions attended.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nominet.org.uk/tech/2009/06/22/notes-from-uxlondon/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
