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

<channel>
	<title>wireshark &#8211; Fredrik Holmberg</title>
	<atom:link href="/tag/wireshark/feed/" rel="self" type="application/rss+xml" />
	<link>/</link>
	<description>Network Consultant</description>
	<lastBuildDate>Thu, 10 Nov 2016 19:39:24 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.7.3</generator>

<image>
	<url>/wp-content/uploads/2016/04/cropped-2601-32x32.png</url>
	<title>wireshark &#8211; Fredrik Holmberg</title>
	<link>/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Packet Analysis Challenge #2 – Solution</title>
		<link>/2016/11/packet-analysis-challenge-2-solution/</link>
		<comments>/2016/11/packet-analysis-challenge-2-solution/#respond</comments>
		<pubDate>Wed, 09 Nov 2016 20:00:26 +0000</pubDate>
		<dc:creator><![CDATA[Fredrik Holmberg]]></dc:creator>
				<category><![CDATA[challenge]]></category>
		<category><![CDATA[packet analysis]]></category>
		<category><![CDATA[wireshark]]></category>
		<category><![CDATA[wiresharklympics]]></category>

		<guid isPermaLink="false">/?p=533</guid>
		<description><![CDATA[While we wait for Magnus Karlsen to make his first move (E4?), here&#8217;s a solution walk-through of the second Packet Capture Analysis challenge. Spoilers ahead 🙂 Here we go #1 &#8211; How many hops can we assume there are between the client and the server? If we assume a default minimum IP datagram TTL of 64 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><img class="aligncenter wp-image-469 " src="/wp-content/uploads/2016/08/birds-209280_1920-1024x699.jpg" alt="birds-209280_1920" width="455" height="310" srcset="/wp-content/uploads/2016/08/birds-209280_1920-1024x699.jpg 1024w, /wp-content/uploads/2016/08/birds-209280_1920-300x205.jpg 300w, /wp-content/uploads/2016/08/birds-209280_1920-768x524.jpg 768w, /wp-content/uploads/2016/08/birds-209280_1920-676x462.jpg 676w" sizes="(max-width: 455px) 100vw, 455px" /></p>
<p>While we wait for Magnus Karlsen to make <a href="https://worldchess.com/nyc2016/">his first move</a> (E4?), here&#8217;s a solution walk-through of the <a href="/2016/10/packet-analysis-challenge-2/">second</a> Packet Capture Analysis challenge.</p>
<p>Spoilers ahead <img src="https://s.w.org/images/core/emoji/2.2.1/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p><span id="more-533"></span></p>
<h3>Here we go</h3>
<h4>#1 &#8211; How many hops can we assume there are between the client and the server?</h4>
<p>If we assume a default minimum IP datagram TTL of 64 (WHAT? See <a href="https://tools.ietf.org/html/rfc1700#page-64">https://tools.ietf.org/html/rfc1700#page-64</a>), the server 204.152.184.134 is <strong>14 hops</strong> away because the IP datagram TTL is 50 in all TCP segments received by the client.</p>
<p><em>hops = def.ttl &#8211; rcv.ttl</em></p>
<p>How to find the IP TTL value:</p>
<p><img class="alignnone wp-image-542 size-full" src="/wp-content/uploads/2016/11/ws_chal2_q1.png" alt="ws_chal2_q1" width="633" height="436" srcset="/wp-content/uploads/2016/11/ws_chal2_q1.png 633w, /wp-content/uploads/2016/11/ws_chal2_q1-300x207.png 300w" sizes="(max-width: 633px) 100vw, 633px" /></p>
<h4>#2 &#8211; Using fingerprinting techniques, what OS is the server likely running? (1 point per technique)</h4>
<p>One way is to look at the HTTP 200 OK response from the server. Usually the application give away some hints on OS and software used:</p>
<p><img class="alignnone size-full wp-image-543" src="/wp-content/uploads/2016/11/ws_chal2_q2_1.png" alt="ws_chal2_q2_1" width="612" height="455" srcset="/wp-content/uploads/2016/11/ws_chal2_q2_1.png 612w, /wp-content/uploads/2016/11/ws_chal2_q2_1-300x223.png 300w" sizes="(max-width: 612px) 100vw, 612px" /></p>
<p>It claims to be a <strong>FreeBSD</strong> host.</p>
<p>Another indicator of OS type/version can be found by looking at the advertised IP TTL and TCP Window Size values:</p>
<p><img class="alignnone size-full wp-image-544" src="/wp-content/uploads/2016/11/ws_chal2_q2_2.png" alt="ws_chal2_q2_2" width="663" height="512" srcset="/wp-content/uploads/2016/11/ws_chal2_q2_2.png 663w, /wp-content/uploads/2016/11/ws_chal2_q2_2-300x232.png 300w" sizes="(max-width: 663px) 100vw, 663px" /></p>
<p>A combination of IP TTL 64 and Window Size 65535 is often found in *nix/FreeBSD systems. More information <a href="http://www.netresec.com/?page=Blog&amp;month=2011-11&amp;post=Passive-OS-Fingerprinting">here</a> and <a href="http://subinsb.com/default-device-ttl-values">here</a>.</p>
<p>But wait, the Windows client is using the exact same values!? Yes, implementation &#8220;standards&#8221; are nice <img src="https://s.w.org/images/core/emoji/2.2.1/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<h4>#3 &#8211; What is the average RTT delay between the client and the server? (1 point)</h4>
<p>Start off by changing <strong>View &gt; Time Display Format</strong> to <strong>Time Since Previous Displayed Packet.</strong></p>
<p>Then we can look at the SYN/ACK response during a TCP handshake to determine the RTT, <strong>around 20 ms</strong> in this case.</p>
<p><img class="alignnone size-full wp-image-545" src="/wp-content/uploads/2016/11/ws_chal2_q3.png" alt="ws_chal2_q3" width="610" height="207" srcset="/wp-content/uploads/2016/11/ws_chal2_q3.png 610w, /wp-content/uploads/2016/11/ws_chal2_q3-300x102.png 300w" sizes="(max-width: 610px) 100vw, 610px" /></p>
<p>Why the SYN/ACK handshake step? Because that segment is generated by the remote end TCP/IP stack, without any added application delay.</p>
<h4>#4 &#8211; Following frame #14886, what TCP sequence number (relative) is the client expecting to receive next? (1 point + 1 bonus)</h4>
<p>Looking at frame #14886 we see a TCP sequence number of 4641056. That segment had a payload of 1460 Bytes. The next sequence number in the stream is 4641056 + 1460 = <strong>4642516</strong>.</p>
<p>As we see in frame #14889 the client does not receive the expected segment and TCP SACK kicks in.</p>
<p><img class="alignnone size-full wp-image-546" src="/wp-content/uploads/2016/11/ws_chal2_q4.png" alt="ws_chal2_q4" width="737" height="339" srcset="/wp-content/uploads/2016/11/ws_chal2_q4.png 737w, /wp-content/uploads/2016/11/ws_chal2_q4-300x138.png 300w, /wp-content/uploads/2016/11/ws_chal2_q4-676x311.png 676w" sizes="(max-width: 737px) 100vw, 737px" /></p>
<h4>Bonus – In what frame does it receive the expected TCP segment?</h4>
<p>Since we know that the sequence number is 4642516, we can apply a specific Display Filter using <strong>tcp.seq</strong>:</p>
<p><img class="alignnone size-full wp-image-547" src="/wp-content/uploads/2016/11/ws_chal2_q4_b.png" alt="ws_chal2_q4_b" width="873" height="97" srcset="/wp-content/uploads/2016/11/ws_chal2_q4_b.png 873w, /wp-content/uploads/2016/11/ws_chal2_q4_b-300x33.png 300w, /wp-content/uploads/2016/11/ws_chal2_q4_b-768x85.png 768w, /wp-content/uploads/2016/11/ws_chal2_q4_b-676x75.png 676w" sizes="(max-width: 873px) 100vw, 873px" /></p>
<p><strong>Frame #14981!</strong></p>
<h4>5# &#8211; At the beginning of the file transfer there is a delay lasting around 3 seconds. Why? (2 points)</h4>
<p>A graphical representation of the transfer halting<br />
<strong>Statistics &gt; TCP Stream Graphs &gt; Time Sequence (Stevens):</strong></p>
<div id="attachment_548" style="width: 789px" class="wp-caption alignnone"><img class="wp-image-548 size-full" src="/wp-content/uploads/2016/11/ws_chal2_q5_1.png" alt="ws_chal2_q5_1" width="779" height="566" srcset="/wp-content/uploads/2016/11/ws_chal2_q5_1.png 779w, /wp-content/uploads/2016/11/ws_chal2_q5_1-300x218.png 300w, /wp-content/uploads/2016/11/ws_chal2_q5_1-768x558.png 768w, /wp-content/uploads/2016/11/ws_chal2_q5_1-676x491.png 676w" sizes="(max-width: 779px) 100vw, 779px" /><p class="wp-caption-text">Awkward silence.</p></div>
<p><span style="font-weight: 400;">The client TCP receive buffer is considered full in frame #8662. The client is reporting a window size of 536 Bytes which does not allow for a full TCP segment of 1460 Bytes. For some reason the client application (browser) is not pulling data fast enough from its buffer.</span></p>
<p><img class="alignnone size-full wp-image-549" src="/wp-content/uploads/2016/11/ws_chal2_q5_2.png" alt="ws_chal2_q5_2" width="703" height="338" srcset="/wp-content/uploads/2016/11/ws_chal2_q5_2.png 703w, /wp-content/uploads/2016/11/ws_chal2_q5_2-300x144.png 300w, /wp-content/uploads/2016/11/ws_chal2_q5_2-676x325.png 676w" sizes="(max-width: 703px) 100vw, 703px" /></p>
<p><span style="font-weight: 400;">The transfer halts for around 3 seconds until the client has finished processing the data and reports a window of 64 KB (256KB as seen in Wireshark is due to Window Scaling). The server continues transferring at frame #8665.</span></p>
<h3>That&#8217;s it!</h3>
<p>Hope you had some fun solving these. More to come <img src="https://s.w.org/images/core/emoji/2.2.1/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>Have a nice day! <img src="https://s.w.org/images/core/emoji/2.2.1/72x72/1f596.png" alt="🖖" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
]]></content:encoded>
			<wfw:commentRss>/2016/11/packet-analysis-challenge-2-solution/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Packet Analysis Challenge #2</title>
		<link>/2016/10/packet-analysis-challenge-2/</link>
		<comments>/2016/10/packet-analysis-challenge-2/#respond</comments>
		<pubDate>Thu, 06 Oct 2016 09:43:58 +0000</pubDate>
		<dc:creator><![CDATA[Fredrik Holmberg]]></dc:creator>
				<category><![CDATA[packet analysis]]></category>
		<category><![CDATA[wireshark]]></category>
		<category><![CDATA[challenge]]></category>
		<category><![CDATA[wiresharklympics]]></category>

		<guid isPermaLink="false">/?p=518</guid>
		<description><![CDATA[Round two of #Wiresharklympics is here! Having survived round one, you know the drill. The tiny specs of data that allow services like Facebook and the Internet to work will be put under heavy scrutiny. Wireshark has reached a stable release of 2.2.1 and is eagerly awaiting new challenges. We will yet again use a sample packet [&#8230;]]]></description>
				<content:encoded><![CDATA[<div style="width: 415px" class="wp-caption aligncenter"><img class="" src="https://upload.wikimedia.org/wikipedia/commons/e/ea/Prionace_glauca_1.jpg" alt="The Sharkminator returns." width="405" height="270" /><p class="wp-caption-text">The Sharkminator returns.</p></div>
<p>Round two of <strong>#Wiresharklympics</strong> is here! Having survived <a href="/2016/08/packet-analysis-challenge-1/">round one</a>, you know the drill. The tiny specs of data that allow services like Facebook and the Internet to work will be put under heavy scrutiny.</p>
<p><a href="https://www.wireshark.org/">Wireshark</a> has reached a stable release of <a href="https://www.wireshark.org/docs/relnotes/wireshark-2.2.1.html">2.2.1</a> and is eagerly awaiting new challenges.</p>
<p><span id="more-518"></span></p>
<p>We will yet again use a sample packet capture from Netresecs <a href="http://www.netresec.com/?page=PcapFiles">list</a>.</p>
<p>The packet capture sample can be downloaded here:<br />
<a href="https://dl.dropboxusercontent.com/u/1185688/blog/wireshark2.pcapng">https://dl.dropboxusercontent.com/u/1185688/blog/wireshark2.pcapng</a></p>
<p>It&#8217;s safe to download. <a href="https://www.virustotal.com/nb/url/db7477fc363776d14277b0678d16cf88955a951d209812f7c57bfa7d82a48f44/analysis/1475743936/">VirusTotal concur</a>.</p>
<h3>Enough yada yada</h3>
<p>Five questions. Should be at least 8 points up for grabs <img src="https://s.w.org/images/core/emoji/2.2.1/72x72/1f590.png" alt="🖐" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>Start off by applying this display filter &#8220;tcp.stream == 16&#8221;.</p>
<ol>
<li>How many hops can we assume there are between the client and the server? (1 point)</li>
<li>Using fingerprinting techniques, what OS is the server likely running? (1 point per technique)</li>
<li>What is the average RTT delay between the client and the server? (1 point)</li>
<li>Following frame #14886, what TCP sequence number (relative) is the client expecting to receive next? (1 point + 1 bonus)<br />
Bonus &#8211; In what frame does it receive the expected TCP segment?</li>
<li>At the beginning of the file transfer there is a delay lasting around 3 seconds. Why? (2 points)</li>
</ol>
<h3>Easy peasy?</h3>
<p>Please send me your questions and answers via a communication transport of your liking. A comment here, the <a href="http://twitter.com/holmahenkel">social medias</a> or <a href="mailto:mail@fredrikholmberg.com">email</a>. Doesn&#8217;t matter!</p>
<p>The winner will of course receive loads of <a href="http://www.urbandictionary.com/define.php?term=street%20cred">street cred</a>. Way better than Facebook likes.</p>
<p>Have a great day <img src="https://s.w.org/images/core/emoji/2.2.1/72x72/1f43c.png" alt="🐼" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
]]></content:encoded>
			<wfw:commentRss>/2016/10/packet-analysis-challenge-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Packet Analysis Challenge #1 &#8211; Solution</title>
		<link>/2016/08/packet-analysis-challenge-1-solution/</link>
		<comments>/2016/08/packet-analysis-challenge-1-solution/#respond</comments>
		<pubDate>Sun, 14 Aug 2016 00:11:01 +0000</pubDate>
		<dc:creator><![CDATA[Fredrik Holmberg]]></dc:creator>
				<category><![CDATA[challenge]]></category>
		<category><![CDATA[wireshark]]></category>

		<guid isPermaLink="false">/?p=417</guid>
		<description><![CDATA[It&#8217;s time for a walk-through of how to solve the first Packet Analysis Challenge. Happy to see that there are plenty of fine Wireshark warriors out there! Hope you had some fun 👍 The fastest one to answer all the questions including the bonus round was a local champion named Martin Karlsen! Lots of packet level street cred is hereby sent your way. [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><img class="wp-image-469 aligncenter" src="/wp-content/uploads/2016/08/birds-209280_1920-1024x699.jpg" alt="birds-209280_1920" width="439" height="300" srcset="/wp-content/uploads/2016/08/birds-209280_1920-1024x699.jpg 1024w, /wp-content/uploads/2016/08/birds-209280_1920-300x205.jpg 300w, /wp-content/uploads/2016/08/birds-209280_1920-768x524.jpg 768w, /wp-content/uploads/2016/08/birds-209280_1920-676x462.jpg 676w" sizes="(max-width: 439px) 100vw, 439px" /></p>
<p>It&#8217;s time for a walk-through of how to solve the <a href="/2016/08/packet-analysis-challenge-1/">first Packet Analysis Challenge</a>.</p>
<p>Happy to see that there are plenty of fine Wireshark warriors out there! Hope you had some fun <img src="https://s.w.org/images/core/emoji/2.2.1/72x72/1f44d.png" alt="👍" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p><span id="more-417"></span></p>
<p>The fastest one to answer all the questions including the bonus round was a local champion named <strong>Martin Karlsen</strong>! Lots of packet level street cred is hereby sent your way. He also has a website up at <a href="http://exceededintransit.net/">exceededintransit.net</a> that you can check out. Don&#8217;t expect to find cooking recipes there. Next-gen Jedi that one.</p>
<h3>Yes, OK, just give me the answers</h3>
<h4>#1 &#8211; How many non-broadcast IPv4 nodes is Wireshark seeing?</h4>
<p>Go to <strong>Statistics &gt; Endpoints</strong> to list all the endpoints that Wireshark is seeing across all TCP/IP layers. Select <strong>IPv4</strong>:</p>
<p><img class="alignnone size-full wp-image-420" src="/wp-content/uploads/2016/08/ws_chal1_q1.png" alt="ws_chal1_q1" width="635" height="363" srcset="/wp-content/uploads/2016/08/ws_chal1_q1.png 635w, /wp-content/uploads/2016/08/ws_chal1_q1-300x171.png 300w" sizes="(max-width: 635px) 100vw, 635px" /></p>
<p>With 255.255.255.255 being a Limited Broadcast address (<a href="https://tools.ietf.org/html/rfc5735#section-4">rfc5735#section-4</a>), this leaves us with a<strong> total of 11 IPv4 nodes.</strong></p>
<p>&nbsp;</p>
<h4>#2 &#8211; The client downloads an EXE file, twice. From which countries is it downloading the file from?</h4>
<p>Apply a display filter to only focus on HTTP requests containing the word &#8220;exe&#8221;:</p>
<p><img class="alignnone size-full wp-image-422" src="/wp-content/uploads/2016/08/ws_chal1_q2.png" alt="ws_chal1_q2" width="640" height="229" srcset="/wp-content/uploads/2016/08/ws_chal1_q2.png 640w, /wp-content/uploads/2016/08/ws_chal1_q2-300x107.png 300w" sizes="(max-width: 640px) 100vw, 640px" /></p>
<p>Frame number 842 and 8292 initiates the downloads and list two different destination IPv4 addresses. Run a whois query against them to find out where they originate:</p>
<blockquote>
<pre>$ whois 61.8.0.17 | grep Country
<strong>Country: AU</strong>
$ whois 204.152.184.134 | grep Country
<strong>Country: US
</strong></pre>
</blockquote>
<p>There you have it, <strong>Australia</strong> and the <strong>United States</strong>.</p>
<p>&nbsp;</p>
<h4>#3 &#8211; How many Bytes is the client expecting to download for each EXE file?</h4>
<p>We can find this information by looking at the HTTP 200 OK response from the server (frames 844 and 8294):</p>
<p><img class="alignnone size-full wp-image-423" src="/wp-content/uploads/2016/08/ws_chal1_q3.png" alt="ws_chal1_q3" width="575" height="589" srcset="/wp-content/uploads/2016/08/ws_chal1_q3.png 575w, /wp-content/uploads/2016/08/ws_chal1_q3-293x300.png 293w" sizes="(max-width: 575px) 100vw, 575px" /></p>
<p>The HTTP header <strong>Content-Length</strong> indicates the size of the entity-body in Bytes (<a href="https://tools.ietf.org/html/rfc2616#section-14.13">rfc2616#section-14.13</a>).</p>
<p>The client therefore expect to download 78597807 Bytes (78.5 MB).</p>
<p>&nbsp;</p>
<h4>#4 &#8211; Looking at the fastest of the two transfers, at what speed is the file downloaded on average in kbps, kilobit per second?</h4>
<p>Go to <strong>Statistics &gt; Conversations </strong>and select TCP (since the two transfers used HTTP, which is transported over TCP).</p>
<p><img class="alignnone size-full wp-image-431" src="/wp-content/uploads/2016/08/ws_chal1_q4_1.png" alt="ws_chal1_q4_1" width="637" height="244" srcset="/wp-content/uploads/2016/08/ws_chal1_q4_1.png 637w, /wp-content/uploads/2016/08/ws_chal1_q4_1-300x115.png 300w" sizes="(max-width: 637px) 100vw, 637px" /></p>
<p>Click on the column <strong>Bytes</strong> to sort the table. The top two conversations list the file transfers.</p>
<p>Next, find the column <strong>Bits/s B -&gt; A</strong> (meaning the download direction from the client perspective).</p>
<p><img class="alignnone size-full wp-image-430" src="/wp-content/uploads/2016/08/ws_chal1_q4_2.png" alt="ws_chal1_q4_2" width="584" height="460" srcset="/wp-content/uploads/2016/08/ws_chal1_q4_2.png 584w, /wp-content/uploads/2016/08/ws_chal1_q4_2-300x236.png 300w" sizes="(max-width: 584px) 100vw, 584px" /></p>
<p>The server providing the fastest file transfer is the US host 204.152.184.134. It delivers the EXE file at an average speed of <strong>2344 Kbps or 2.34 Mbps</strong>.</p>
<p>&nbsp;</p>
<h4>#5 &#8211; One node is not accepting the use of full TCP segments. Which one?</h4>
<p>A 100% fully utilized TCP segment carry 1460 Bytes. You can load the HTML payload of <a href="http://ulv.no/">http://ulv.no/</a> almost three times in such a segment. Plenty of data.</p>
<p>If there&#8217;s a need for a limit, it is set during the initial TCP handshake in a separate TCP header option:</p>
<blockquote><p><a href="https://tools.ietf.org/html/rfc793#page-19">https://tools.ietf.org/html/rfc793#page-19</a></p>
<p><strong>Maximum Segment Size Option:</strong><br />
If this option is present, then it communicates the maximum receive segment size at the TCP which sends this segment. This field must only be sent in the initial connection request (i.e., in segments with the SYN control bit set). If this option is not used, any segment size is allowed.</p></blockquote>
<p>Meaning, if <span style="color: #008000;"><strong>Node A</strong></span> set its MSS to 1100 and <span style="color: #800080;"><strong>Node B</strong></span> set its MSS to 1460 in their handshake, any segment sent to <span style="color: #008000;"><strong>Node A</strong></span> must be limited to 1100 Bytes. <span style="color: #800080;"><strong>Node B</strong></span> however is happy to receive up to 1460 Bytes of payload.</p>
<p>So which one is it?</p>
<p>First, apply a display filter to single out all TCP handshakes. All handshakes must have the SYN flag set.</p>
<p><img class="alignnone size-full wp-image-432" src="/wp-content/uploads/2016/08/ws_chal1_q5_1.png" alt="ws_chal1_q5_1" width="401" height="396" srcset="/wp-content/uploads/2016/08/ws_chal1_q5_1.png 401w, /wp-content/uploads/2016/08/ws_chal1_q5_1-300x296.png 300w" sizes="(max-width: 401px) 100vw, 401px" /></p>
<p>Next select a frame, then in the Packet Details pane, expand the subtree of <strong>Transmission Control Protocol</strong>. Scroll down to <strong>Options</strong> and look for <strong>Maximum segment size</strong>.</p>
<p>Expand it and right-click on <strong>MSS Value</strong> and select <strong>Apply as Column:</strong></p>
<p><img class="alignnone size-full wp-image-439" src="/wp-content/uploads/2016/08/ws_chal1_q5_02.png" alt="ws_chal1_q5_02" width="489" height="506" srcset="/wp-content/uploads/2016/08/ws_chal1_q5_02.png 489w, /wp-content/uploads/2016/08/ws_chal1_q5_02-290x300.png 290w" sizes="(max-width: 489px) 100vw, 489px" /></p>
<p>This allow us easily see all the TCP MSS values set during TCP handshakes.</p>
<p>By sorting using this new shiny <strong>MSS Value</strong> column, we find one outlier:</p>
<p><img class="alignnone size-full wp-image-437" src="/wp-content/uploads/2016/08/ws_chal1_q5_3.png" alt="ws_chal1_q5_3" width="606" height="224" srcset="/wp-content/uploads/2016/08/ws_chal1_q5_3.png 606w, /wp-content/uploads/2016/08/ws_chal1_q5_3-300x111.png 300w" sizes="(max-width: 606px) 100vw, 606px" /></p>
<p>The host <strong>216.251.114.10</strong> in frames 6 and 30 limit any TCP segments sent its way to 1380 Bytes.</p>
<p><strong>Optional solution:<br />
</strong>Apply a display filter to list all MSS values below 1460 Bytes using &#8220;<strong>tcp.options.mss_val &lt; 1460</strong>&#8220;.</p>
<p>&nbsp;</p>
<h4>BONUS &#8211; How many Bytes is the client potentially missing out on per round-trip?</h4>
<p>If a full TCP segment is 1460 Bytes, then we&#8217;re missing out on <strong>80 Bytes</strong> of data in each TCP segment sent towards 216.251.114.10.</p>
<p><strong>But wait a minute, you said client! Hahaa! <img src="https://s.w.org/images/core/emoji/2.2.1/72x72/1f46f.png" alt="👯" class="wp-smiley" style="height: 1em; max-height: 1em;" /></strong></p>
<p>Yes I did. And in retrospect it was a weird example to use since 216.251.114.10 is a web<span style="text-decoration: underline;"> <strong>server</strong></span> and not a client. Or is it..? This could turn into a nice <a href="https://en.wikipedia.org/wiki/Client%E2%80%93server_model">client-server model</a> debate.</p>
<p>But, because of this ambiguity &#8211; my bad. Or as the <a href="http://www.urbandictionary.com/define.php?term=My%20bad">Urban Dictionary</a> would put it:</p>
<blockquote><p>&#8220;I did something bad, and I recognize that I did something bad, but there is nothing that can be done for it now, and there is technically no reason to apologize for that error, so let&#8217;s just assume that I won&#8217;t do it again, get over it, and move on with our lives.&#8221;</p></blockquote>
<p>Have a great day! <img src="https://s.w.org/images/core/emoji/2.2.1/72x72/1f433.png" alt="🐳" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
]]></content:encoded>
			<wfw:commentRss>/2016/08/packet-analysis-challenge-1-solution/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Packet Analysis Challenge #1</title>
		<link>/2016/08/packet-analysis-challenge-1/</link>
		<comments>/2016/08/packet-analysis-challenge-1/#comments</comments>
		<pubDate>Tue, 02 Aug 2016 09:02:53 +0000</pubDate>
		<dc:creator><![CDATA[Fredrik Holmberg]]></dc:creator>
				<category><![CDATA[packet analysis]]></category>
		<category><![CDATA[wireshark]]></category>
		<category><![CDATA[challenge]]></category>
		<category><![CDATA[wiresharklympics]]></category>

		<guid isPermaLink="false">/?p=384</guid>
		<description><![CDATA[Vacation&#8217;s over. Your networks have been underutilized for a good long month now. Time to get back to the trenches. Why not start things off with a proper packet analysis challenge? At least fire up Wireshark to see if there&#8217;s an auto-update waiting for you? Thank you Netresec for providing a huge list of packet captures to play with! [&#8230;]]]></description>
				<content:encoded><![CDATA[<div style="width: 468px" class="wp-caption aligncenter"><img src="https://upload.wikimedia.org/wikipedia/commons/e/ea/Prionace_glauca_1.jpg" width="458" height="305" /><p class="wp-caption-text">The Sharkminator</p></div>
<p>Vacation&#8217;s over. Your networks have been underutilized for a good long month now. Time to get back to the trenches. Why not start things off with a proper packet analysis challenge? At least fire up <a href="https://wireshark.org/">Wireshark</a> to see if there&#8217;s an auto-update waiting for you?</p>
<p><span id="more-384"></span></p>
<p>Thank you Netresec for providing <a href="http://www.netresec.com/?page=PcapFiles">a huge list</a> of packet captures to play with!</p>
<p>We will borrow a 13 MB packet capture from the excellent book &#8220;<a href="https://www.amazon.com/Practical-Packet-Analysis-Wireshark-Real-World/dp/1593272669">Practical Packet Analysis</a>&#8220;.</p>
<blockquote>
<pre>$ <strong>shasum wireshark1.pcapng</strong>
b8060f2b946f33b79833710db458368cd382d06c wireshark1.pcapng</pre>
</blockquote>
<p>Please go ahead and <a href="https://dl.dropboxusercontent.com/u/1185688/wireshark1.pcapng">download</a> the pcap file. Yes, it&#8217;s <a href="https://www.virustotal.com/en/file/1ec10a7f08ffe6e597f5ecde13c120003f75b8a96d6eb1680006f9b786406521/analysis/1470058599/">safe</a> to download.</p>
<p>Ready?</p>
<h3>&lt;gong sound&gt;</h3>
<p>Five questions + one bonus. One point per question:</p>
<ol>
<li>How many non-broadcast IPv4 nodes is Wireshark seeing?</li>
<li>The client downloads an EXE file, twice. From which countries is it downloading the file from?</li>
<li>How many Bytes is the client expecting to download for each EXE file?</li>
<li>Looking at the fastest of the two transfers, at what speed is the file downloaded on average in kbps, kilobit per second?</li>
<li>One node is not accepting the use of full TCP segments. Which one?
<ol>
<li>BONUS &#8211; How many Bytes is the client potentially missing out on per round-trip?</li>
</ol>
</li>
</ol>
<h3>Easy peasy?</h3>
<p>Please send me your answers via a communication platform of your liking. The <a href="http://twitter.com/holmahenkel">social medias</a> or <a href="mailto:mail@fredrikholmberg.com">email</a>. Doesn&#8217;t matter!</p>
<p>The winner will get loads of street cred as defined by <a href="http://www.urbandictionary.com/define.php?term=street%20cred">Urban Dictionary</a>:</p>
<blockquote><p>He&#8217;s been thru it all. His street cred is undeniable.</p></blockquote>
<p>That&#8217;s all you need. Get to it! <img src="https://s.w.org/images/core/emoji/2.2.1/72x72/1f44a.png" alt="👊" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
]]></content:encoded>
			<wfw:commentRss>/2016/08/packet-analysis-challenge-1/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>App troubleshooting using Wireshark</title>
		<link>/2016/05/app-troubleshooting-using-wireshark/</link>
		<comments>/2016/05/app-troubleshooting-using-wireshark/#respond</comments>
		<pubDate>Wed, 25 May 2016 13:43:13 +0000</pubDate>
		<dc:creator><![CDATA[Fredrik Holmberg]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[ios]]></category>
		<category><![CDATA[tls]]></category>
		<category><![CDATA[troubleshooting]]></category>
		<category><![CDATA[wireshark]]></category>

		<guid isPermaLink="false">/?p=261</guid>
		<description><![CDATA[Remember those glory days when phones still had buttons? Before the selfie stick era. I used my phone to send SMS messages and call people. Browse the internet using WAP. Send a hi-def 320x240px picture now and then using MMS. The only pieces of software I had to deal with were the pre-installed stock applications (renamed [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Remember those glory days when phones still had buttons? Before the selfie stick era. I used my phone to send SMS messages and call people. Browse the internet using <a href="https://en.wikipedia.org/wiki/Wireless_Application_Protocol">WAP</a>. Send a hi-def 320x240px picture now and then using MMS. The only pieces of software I had to deal with were the pre-installed stock applications (renamed to &#8220;apps&#8221; by Apple in 2008). All other internet activities had to be done on a computer.</p>
<p>Today, the phone is a touch screen that allow you to interact with apps. Everything is done through apps. We use them to buy tickets, share pictures with grandparents, access our bank account, post a picture of today&#8217;s dinner. So what happens when your favorite app stops working all of a sudden? How do you troubleshoot it?</p>
<p><span id="more-261"></span></p>
<p>Once I had an issue with a banking app on my iPhone. After upgrading to iOS 9, logging in using two-factor authentication stopped working. It had persisted for several months and when I asked the company I got the default reply that &#8220;it&#8217;s a known issue and the developers are working a fix&#8221;. Ok great.</p>
<p>This is what greeted me when I tried logging in:</p>
<p><img class="aligncenter wp-image-266" src="/wp-content/uploads/2016/05/err2-169x300.png" alt="err2" width="282" height="500" srcset="/wp-content/uploads/2016/05/err2-169x300.png 169w, /wp-content/uploads/2016/05/err2-577x1024.png 577w, /wp-content/uploads/2016/05/err2.png 640w" sizes="(max-width: 282px) 100vw, 282px" /></p>
<p>You could sit and look at that white square for as long as you wanted. Nothing would happen. No error message or <a href="https://en.wikipedia.org/wiki/Spinning_pinwheel">spinning beach ball</a>.</p>
<h3>Cursed app</h3>
<p>So then I decided to troubleshoot it myself. The same way I troubleshoot applications <a href="/consulting/">professionally</a>. Not the developer way of debugging through Xcode. The network engineer way by looking at packets. Shouldn&#8217;t be too hard, right? <img src="https://s.w.org/images/core/emoji/2.2.1/72x72/1f4aa.png" alt="💪" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>Two hurdles:</p>
<ol>
<li>The app was on my iPhone which meant wireless communication.</li>
<li>The communication was likely using an encrypted channel making eavesdropping impossible*.</li>
</ol>
<p><em>* No, nothing is impossible. You can use <a href="https://mitmproxy.org/">mitmproxy</a> or similar tools.</em></p>
<p>Using a <a href="http://routerboard.com/RB750GL">Mikrotik RB750GL</a> I mirrored all traffic sent and received from my iPhone to my laptop. Got Wireshark up and running hoping to find something that indicated an error.</p>
<p>Filtering the output down to the exact moment when I tapped &#8220;Login&#8221; and the two-factor module was supposed to load:</p>
<p><img class="alignnone size-full wp-image-271" src="/wp-content/uploads/2016/05/err3.png" alt="err3" width="1098" height="251" srcset="/wp-content/uploads/2016/05/err3.png 1098w, /wp-content/uploads/2016/05/err3-300x69.png 300w, /wp-content/uploads/2016/05/err3-768x176.png 768w, /wp-content/uploads/2016/05/err3-1024x234.png 1024w, /wp-content/uploads/2016/05/err3-676x155.png 676w" sizes="(max-width: 1098px) 100vw, 1098px" /></p>
<p>Lots of weird text. Don&#8217;t give up just yet.</p>
<p>There&#8217;s a clue here! On line <strong>#6</strong>, Wireshark is trying to help us by showing an error message &#8220;Handshake Failure&#8221;. A fatal alert. That can&#8217;t be good.</p>
<p>Following the TLS handshake failure the server tears down the TCP connection. Nothing happens in the app UI. So much for error handling.</p>
<p>More on Transport Layer Security (TLS) Protocol Version 1.2 Handshakes <a href="https://tools.ietf.org/html/rfc5246#section-7.3">https://tools.ietf.org/html/rfc5246#section-7.3</a>.</p>
<h3>Failing handshakes</h3>
<p>What does this mean? It means that the client is sending something that the server does not agree with.</p>
<p>Then I compared the authentication and handshake mechanism with another banking app. One that worked. It turned out that the two were sending two different cipher suites in their <a href="https://tools.ietf.org/html/rfc5246#section-7.4.1.2">Client Hello</a>:</p>
<p><strong>Failing app (12 ciphers)</strong></p>
<pre><code>TLS_EMPTY_RENEGOTIATION_INFO_SCSV
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA</code></pre>
<p><strong>Working app (same 12 ciphers + 6 additional)</strong></p>
<pre><code>TLS_EMPTY_RENEGOTIATION_INFO_SCSV
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
TLS_RSA_WITH_AES_256_GCM_SHA384
TLS_RSA_WITH_AES_128_GCM_SHA256
TLS_RSA_WITH_AES_256_CBC_SHA256
TLS_RSA_WITH_AES_256_CBC_SHA
TLS_RSA_WITH_AES_128_CBC_SHA256
TLS_RSA_WITH_AES_128_CBC_SHA</code></pre>
<p>The cipher chosen for the working app was &#8220;TLS_RSA_WITH_AES_256_CBC_SHA&#8221;.</p>
<p>After some research I learned that Apple introduced a new security feature in iOS 9 called <a href="https://developer.apple.com/library/ios/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html">App Transport Security (ATS)</a>. Even though it killed my app it&#8217;s a great feature forcing the use of Transport Layer Security (TLS) version 1.2, better ciphers, forward secrecy (FS) among other things.</p>
<p>So the theory now was:</p>
<blockquote><p>&#8220;after upgrading to iOS 9 the client is sending ciphers unsupported by the server&#8221;</p></blockquote>
<p>Every theory should be tested so I decided to use the excellent <a href="https://www.ssllabs.com/ssltest/">Qualys SSL Labs SSL Report tool</a>.</p>
<p>Lo and behold, both server endpoints got a grade of <strong>C</strong> because of two things:</p>
<ol>
<li>&#8220;No support for TLS 1.2, which is the only secure protocol version.&#8221;</li>
<li>&#8220;Handshake Simulation: Apple ATS 9 / iOS 9 &#8211; Protocol or cipher suite mismatch &#8211; Fail&#8221;</li>
</ol>
<p>I got the same results using <strong>nscurl</strong> showing that TLS 1.0 was the only supported version:</p>
<blockquote>
<pre><strong>$ /usr/bin/nscurl --ats-diagnostics --verbose https://login.bank.com/"
</strong>
TLSv1.0 with PFS disabled
ATS Dictionary:
{
    NSExceptionDomains =     {
        "login.bank.com" =         {
            NSExceptionMinimumTLSVersion = "TLSv1.0";
            NSExceptionRequiresForwardSecrecy = false;
        };
    };
}
Result : PASS
</pre>
</blockquote>
<p>&nbsp;</p>
<h3>Show me the fix</h3>
<p>The problem had two possible solutions:</p>
<ul>
<li>Enable support of TLS 1.2 and Apple ATS 9 handshakes on the server side &#8211; GOOD</li>
<li>Offer ciphers outside of the Apple ATS 9 scope on the client side &#8211; BAD</li>
</ul>
<p>Based on my findings the app was updated to version 4.1.0 &#8220;authorisation issue on iOS 9 for Norwegian region&#8221;.</p>
<p>Checked again today to see what had changed:</p>
<ul>
<li>The client is now sending 22 ciphers instead of the ATS 9 default of 12.</li>
<li>The server side now get a rating of A and B by Qualys. TLS 1.2 is now supported. Apple ATS 9 is still unsupported.</li>
</ul>
<p>The world is not perfect, but we&#8217;re getting there. Bit by bit <img src="https://s.w.org/images/core/emoji/2.2.1/72x72/1f4c8.png" alt="📈" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>If you are looking for a troubleshooting expert, have a look at my <a href="/consulting/">Consulting Services</a>.</p>
<p>Have a nice day!</p>
]]></content:encoded>
			<wfw:commentRss>/2016/05/app-troubleshooting-using-wireshark/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
