<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Facets - Shodan Blog]]></title><description><![CDATA[The latest news and developments for Shodan.]]></description><link>https://blog.shodan.io/</link><generator>Ghost 0.7</generator><lastBuildDate>Sat, 11 Apr 2026 20:15:00 GMT</lastBuildDate><atom:link href="https://blog.shodan.io/tag/facets/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Improved Telnet Coverage]]></title><description><![CDATA[<p>During the initial connection handshake with a Telnet server there is an optional exchange of options that tell the client/ server which features are supported on both ends. These features are negotiated using the DO, DONT, WILL and WONT Telnet options.</p>

<p>In case you're not familiar with the DO, DONT,</p>]]></description><link>https://blog.shodan.io/improved-telnet-coverage/</link><guid isPermaLink="false">d4b86342-97d6-4776-8cc0-30fb39d8cc96</guid><category><![CDATA[Filters]]></category><category><![CDATA[Facets]]></category><category><![CDATA[telnet]]></category><dc:creator><![CDATA[John Matherly]]></dc:creator><pubDate>Mon, 15 Jun 2015 00:31:11 GMT</pubDate><media:content url="http://blog.shodan.io/content/images/2015/06/oldschool-computing.jpg" medium="image"/><content:encoded><![CDATA[<img src="http://blog.shodan.io/content/images/2015/06/oldschool-computing.jpg" alt="Improved Telnet Coverage"><p>During the initial connection handshake with a Telnet server there is an optional exchange of options that tell the client/ server which features are supported on both ends. These features are negotiated using the DO, DONT, WILL and WONT Telnet options.</p>

<p>In case you're not familiar with the DO, DONT, WILL and WONT Telnet options here's an excerpt taken from <a href="https://tools.ietf.org/html/rfc854">the official RFC 854</a>:</p>

<ul>
<li><strong>WILL</strong>: Indicates the desire to begin performing, or confirmation that you are now performing, the indicated option.</li>
<li><strong>WONT</strong>: Indicates the refusal to perform, or continue performing, the indicated option.</li>
<li><strong>DO</strong>: Indicates the request that the other party perform, or confirmation that you are expecting the other party to perform, the indicated option.</li>
<li><strong>DONT</strong>: Indicates the demand that the other party stop performing, or confirmation that you are no longer expecting the other party to perform, the indicated option.</li>
</ul>

<script type="text/javascript" src="https://asciinema.org/a/21396.js" id="asciicast-21396" async></script>

<p>Shodan has been crawling and storing the results of the Telnet handshake for a while now but never made it accessible over the search API/ interface. That's changed and now there are the following <strong>new filters and facets</strong>:</p>

<ul>
<li><strong>telnet.option</strong></li>
<li><strong>telnet.do</strong></li>
<li><strong>telnet.dont</strong></li>
<li><strong>telnet.will</strong></li>
<li><strong>telnet.wont</strong></li>
</ul>

<p>These Telnet facets/ filters provide a new way to <a href="http://www.digitalbond.com/blog/2015/06/11/shodan-for-rocket-scientists/">discover and fingerprint devices</a>. The <strong>telnet.option</strong> filter/ facet includes all the options that a server knew about, whether they were sent in the DO, DONT, WILL or WONT phase. I.e. it aggregates the results of all the other options into a unique list of features a server is aware of. The other filters/ facets relate directly to the options outlined in the RFC and let you find servers that support specific functionality. For example, here are servers that know about the <a href="https://www.shodan.io/search?query=port%3A23+telnet.option%3Acom_port_option+">com_port_option</a>.</p>

<p>Telnet remains a popular service that continues to get deployed and integrated across a variety of products, including the latest in Internet of Things devices. The new features should make it easier to uniquely fingerprint devices and keep track of how Telnet usage is changing over time.</p>]]></content:encoded></item><item><title><![CDATA[Duplicate SSH Keys Everywhere]]></title><description><![CDATA[<p>Back in December when I <a href="https://shodanio.wordpress.com/2014/12/03/ssh-revamp/">revamped the SSH banner</a> and started collecting the fingerprint I noticed an odd behavior. It turns out that a few SSH keys are used a lot more than once. For example, the following SSH fingerprint can be found on more than 250,000 devices!</p>

<pre><code>dc:</code></pre>]]></description><link>https://blog.shodan.io/duplicate-ssh-keys-everywhere/</link><guid isPermaLink="false">fd2c0c2e-cc15-4af7-8d8a-92b4a07bc790</guid><category><![CDATA[Facets]]></category><category><![CDATA[research]]></category><category><![CDATA[SSH]]></category><dc:creator><![CDATA[John Matherly]]></dc:creator><pubDate>Tue, 17 Feb 2015 20:15:22 GMT</pubDate><content:encoded><![CDATA[<p>Back in December when I <a href="https://shodanio.wordpress.com/2014/12/03/ssh-revamp/">revamped the SSH banner</a> and started collecting the fingerprint I noticed an odd behavior. It turns out that a few SSH keys are used a lot more than once. For example, the following SSH fingerprint can be found on more than 250,000 devices!</p>

<pre><code>dc:14:de:8e:d7:c1:15:43:23:82:25:81:d2:59:e8:c0
</code></pre>

<p>And there are many more fingerprints that are also duplicated, which you can check out yourself using the following Python code:</p>

<pre><code>import shodan

api = shodan.Shodan(YOUR_API_KEY)

# Get the top 1,000 duplicated SSH fingerprints
results = api.count('port:22', facets=[('ssh.fingerprint', 1000)])

for facet in results['facets']['ssh.fingerprint']:
    print '%s --&gt; %s' % (facet['value'], facet['count'])
</code></pre>

<p>Going back to the fingerprint mentioned above, when you <a href="https://www.shodan.io/search?query=dc%3A14%3Ade%3A8e%3Ad7%3Ac1%3A15%3A43%3A23%3A82%3A25%3A81%3Ad2%3A59%3Ae8%3Ac0">plug that into Shodan</a> the picture becomes somewhat clearer:</p>

<p><img src="https://blog.shodan.io/content/images/2015/02/ssh-fingerprint.png" alt=""></p>

<p>It looks like all devices with the fingerprint are Dropbear SSH instances that have been deployed by <strong>Telefonica de Espana</strong>. It appears that some of their networking equipment comes setup with SSH by default, and the manufacturer decided to re-use the same operating system image across all devices.</p>

<p>The next duplicated fingerprint on the list comes in at around 200,000 devices, followed by another one used by 150,000 devices. By analyzing the facets it's easy to get a picture of systemic issues that plague both hardware manufacturers as well as ISPs/ hosting providers. I've uploaded a list of unique fingerprints and their counts to the following Gist location:</p>

<p><a href="https://gist.github.com/achillean/07f7f1e6b0e6e113a33c">https://gist.github.com/achillean/07f7f1e6b0e6e113a33c</a></p>

<p>Feel free to download the CSV and start analyzing the duplicated fingerprints because there are a lot of them. I wouldn't be surprised if you'd uncover interesting security issues by analyzing why these things are misconfigured.</p>]]></content:encoded></item><item><title><![CDATA[Keeping Up with SSL]]></title><description><![CDATA[<p>SSL is becoming an evermore important aspect of serving and consuming content on the Internet, so it's only fit that Shodan extends the information that it gathers for every SSL-capable service. The banners for SSL services, such as HTTPS, have included the certificate in PEM format for a long time</p>]]></description><link>https://blog.shodan.io/ssl-update/</link><guid isPermaLink="false">2b4901ed-1657-4979-a6a5-a4c82a7051c0</guid><category><![CDATA[SSL]]></category><category><![CDATA[Filters]]></category><category><![CDATA[Facets]]></category><category><![CDATA[API]]></category><category><![CDATA[Reports]]></category><dc:creator><![CDATA[John Matherly]]></dc:creator><pubDate>Mon, 16 Feb 2015 23:55:00 GMT</pubDate><content:encoded><![CDATA[<p>SSL is becoming an evermore important aspect of serving and consuming content on the Internet, so it's only fit that Shodan extends the information that it gathers for every SSL-capable service. The banners for SSL services, such as HTTPS, have included the certificate in PEM format for a long time and you've been able to access that data through the <a href="https://developer.shodan.io/api">REST API</a> or <a href="http://shodan.readthedocs.org/en/latest/examples/cert-stream.html">real-time stream</a>.</p>

<p>After spending some time fixing bugs and making sure it scales, I'm happy to say that Shodan is now also collecting the following information:</p>

<ul>
<li>Parsed certificate</li>
<li>Certificate chain</li>
<li>Supported SSL versions</li>
<li>Preferred cipher</li>
</ul>

<p><img src="https://blog.shodan.io/content/images/2015/02/SSL-Survey---Shodan.png" alt="Distribution of supported SSL versions on the Internet"></p>

<p>All the SSL information has been put into property on the top-level called <strong>ssl</strong> instead of being dug into the <strong>opts</strong> field. This is how it looks like right now:</p>

<pre><code>"ssl": {
    "cert": {
        "sig_alg": "sha1WithRSAEncryption",
        "issued": "20110325103212Z",
        "expires": "20120324103212Z",
        "expired": true,
        "version": 2,
        "extensions": [{
            "data": "\u0003\u0002\u0006@",
            "name": "nsCertType"
        }],
        "serial": 10104044343792293356,
        "issuer": {
            "C": "TW",
            "L": "TAIPEI",
            "O": "CAMEO",
            "ST": "TAIWAN"
        },
        "pubkey": {
            "bits": 1024,
            "type": "rsa"
        },
        "subject": {
            "C": "TW",
            "L": "TAIPEI",
            "O": "CAMEO",
            "ST": "TAIWAN"
        }
    },
    "cipher": {
        "version": "TLSv1/SSLv3",
        "bits": 256,
        "name": "AES256-SHA"
    },
    "chain": ["-----BEGIN CERTIFICATE-----  \nMIICETCCAXqgAwIBAgIJAIw4xswSiNXsMA0GCSqGSIb3DQEBBQUAMD8xCzAJBgNV\nBAYTAlRXMQ8wDQYDVQQIEwZUQUlXQU4xDzANBgNVBAcTBlRBSVBFSTEOMAwGA1UE\nChMFQ0FNRU8wHhcNMTEwMzI1MTAzMjEyWhcNMTIwMzI0MTAzMjEyWjA/MQswCQYD\nVQQGEwJUVzEPMA0GA1UECBMGVEFJV0FOMQ8wDQYDVQQHEwZUQUlQRUkxDjAMBgNV\nBAoTBUNBTUVPMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCj8HWSuWUHYWLD\nASV1KCWd9+9U19tINKgY8CTw/gKeVoF6bjgQ3tuXliScLAsU8nNGiZibaXq9KR67\nnLjjHzFiJDr6s8M3qimLdhcA7kf71v806Mls4KctdrMUiX3Bc7WvYtbClke0QDlC\nFGgK7HksEWpQ026E3pI0T/2mTvbeXQIDAQABoxUwEzARBglghkgBhvhCAQEEBAMC\nBkAwDQYJKoZIhvcNAQEFBQADgYEANbiCHCROX0X9ZbBaOsijkGh6+7WLaLUDEUpp\nrw+bHFKhOvtQgEyQ01U0V9ZYtdPyVLnNVmJu6Q8MPuqBCkpcv0/gH31YSSRyOhid\nvc+qCUCA7UBqt5f7QVOOYPqhzieoUO+pmQ3zidcwUGYh19gQv/fl7SnG00cDgxg3\nm89S7ao=\n-----END CERTIFICATE-----\n"],
    "versions": ["TLSv1", "SSLv3", "-SSLv2", "-TLSv1.1", "-TLSv1.2"]
}
</code></pre>

<p>The <strong>ssl.versions</strong> field is a list of SSL versions that the device permits and denies. If the version has a <strong>-</strong> (dash) in front of the version, then the device <strong>does not</strong> support that SSL version. If the version doesn't begin with a <strong>-</strong>, then the service supports the given SSL version. For example, the above server supports:</p>

<ul>
<li>TLSv1</li>
<li>SSLv3</li>
</ul>

<p>And it denies versions:</p>

<ul>
<li>SSLv2</li>
<li>TLSv1.1</li>
<li>TLSv1.2</li>
</ul>

<p>The information that used to be stored in the <strong>opts.pem</strong> field is now available in the <strong>ssl.chain</strong> field, which is basically an array of PEM-serialized certificates. If you'd like to access the parsed information of the service's main certificate then you can get that directly from the <strong>ssl.cert</strong> property. It's the parsed SSL certificate made accessible in a programmer-friendly way (parsing certificates can be a pain...).</p>

<h4 id="newsslfiltersandfacets">New SSL Filters and Facets</h4>

<p>Alongside these new properties, I'm also re-introducing revamped SSL filters and facets. The following <strong>new filters and facets</strong> are available in Shodan to search the SSL data:</p>

<ul>
<li>ssl.chain_count</li>
<li>ssl.version</li>
<li>ssl.cert.alg</li>
<li>ssl.cert.expired</li>
<li>ssl.cert.extension</li>
<li>ssl.cert.serial</li>
<li>ssl.cert.pubkey.bits</li>
<li>ssl.cert.pubkey.type</li>
<li>ssl.cipher.version</li>
<li>ssl.cipher.bits</li>
<li>ssl.cipher.name</li>
</ul>

<p>Using these filters, you can for example keep track of devices that <strong>only allow SSLv2</strong> - a deprecated version of SSL that nothing should exclusively support:</p>

<p><a href="https://www.shodan.io/search?query=ssl.version%3Asslv2">ssl.version:sslv2</a></p>

<p>Or you can generate a distribution of certificate chain lengths by faceting on <strong>ssl.chain_count</strong>:</p>

<p><img src="https://blog.shodan.io/content/images/2015/02/ssl-chain-length.png" alt=""></p>

<p>The above chart shows that the majority of SSL certificates are self-signed and don't trace back to a root.</p>

<p>The reports that Shodan generates also take advantage of this new SSL information, so keep an eye out for those charts in your new reports. For example, here's a general report on the state of SSL usage on the Internet:</p>

<p><a href="https://www.shodan.io/report/EvoSNCVF">https://www.shodan.io/report/EvoSNCVF</a></p>

<p>I'm excited to be collecting this new data and I'd love to hear your thoughts (<a href="https://twitter.com/achillean">@achillean</a>). As always, if there's something you'd like to see me add just <a href="mailto:jmath@shodan.io">send me an email</a></p>]]></content:encoded></item></channel></rss>