У цьому розділі пояснюється, що таке Shodan, як він збирає інформацію про пристрої в Інтернеті та як відбувається формування «банера» — цифрового відбитка сервісу. Ви дізнаєтесь, як інтерпретувати метадані пристроїв, що таке IPv6-сканування, яким чином працює режим збору даних, як відбувається розповсюдження та рандомізація результатів. Окремий блок присвячено роботі з SSL-сертифікатами та базовій перевірці вразливостей. Цей розділ — ідеальний старт для розуміння, як Shodan бачить світ онлайн-пристроїв.
Shodan — це пошуковий рушій для пристроїв, підключених до інтернету. Якщо звичні пошуковики шукають вебсторінки, то Shodan дозволяє знаходити саме пристрої й служби: вебсервери з певним ПЗ, мережеві камери, промислові контролери та інше обладнання. Це корисно, коли потрібно зрозуміти, які версії програмного забезпечення поширені, порахувати відкриті FTP-сервери або оцінити масштаби потенційної уразливості після її публікації — завдання, для яких звичайні пошуковики не підходять.
Основна одиниця інформації в Shodan — банер. Банер — це текст, який служба повертає при встановленні з’єднання: для вебсерверів це HTTP-заголовки, для інших протоколів — власні відповіді або привітальні рядки. Вміст банера сильно залежить від протоколу. Наприклад, типовий HTTP-банер може виглядати так:
За цим банером видно, що на пристрої працює вебсервер nginx версії 1.1.19. Інші служби повертають інші банери — наприклад, промислові контролери Siemens S7 часто віддають докладні відомості про прошивку, модель і серійні номери:
Copyright: Original Siemens Equipment PLC name: S7_Turbine Module type: CPU 313C Unknown (129): Boot Loader A Module: 6ES7 313-5BG04-0AB0 v.0.3 Basic Firmware: v.3.3.8 Module name: CPU 313C Serial number of module: S Q-D9U083642013 Plant identification: Basic Hardware: 6ES7 313-5BG04-0AB0 v.0.3
Тому перед роботою зі Shodan важливо визначити, які саме сервіси вас цікавлять: запити й фільтри для вебсерверів відрізнятимуться від тих, що потрібні для SCADA, FTP чи IP-камер.
Shodan індексує банери, а не хости: якщо на одній IP-адресі запущено кілька служб, кожна з них з’явиться в індексі окремо. Окрім банерів, сервіс збирає метадані — геолокацію, ім’я хоста, операційну систему та інші атрибути. Більшість цих даних доступні через вебінтерфейс; розширені можливості пошуку й масова автоматизація зручніші через API.
Shodan також працює з IPv6. Хоча спочатку обсяг IPv6-записів був значно меншим, ніж для IPv4, із поширенням IPv6 їхня частка зростає, і це варто враховувати під час оцінки поверхні атаки або пошуку пристроїв у сучасних мережах.
Підхід до роботи зі Shodan має бути системним: сформулюйте мету (що саме шукаєте), підберіть відповідні фільтри та перевіряйте метадані, щоб відсіяти шум і помилкові результати.
Сканери Shodan працюють цілодобово й оновлюють базу в реальному часі — кожен візит на сайт показує актуальний «знімок» Інтернету.
Режим роботи сканерів: Сканери постійно перевіряють адреси й порти, збираючи банери та метадані. Це забезпечує свіжість даних і можливість швидкого аналізу.
Географічне розподілення: Сканери розміщені по всьому світу (наприклад: США — східне і західне узбережжя, Китай, Ісландія, Франція, Тайвань, В’єтнам, Румунія, Чехія). Таке покриття мінімізує вплив локальних блокувань і робить збір даних рівномірнішим.
Алгоритм простий:
генерується випадкова IPv4-адреса;
вибирається випадковий порт зі списку, що перевіряє Shodan;
підключається і захоплюється банер;
повтор. Рандомний (не інкрементний) підхід забезпечує однакове покриття мережі й знижує систематичну упередженість у даних.
Комбінація цілодобової роботи, глобального розташування сканерів і рандомізації робить дані Shodan репрезентативними й стійкими до локальних обмежень. Це допомагає отримати більш об’єктивну картину при моніторингу або оцінці вразливостей.
Shodan зберігає детальну інформацію про SSL/TLS у полі ssl банера: це не лише сам сертифікат, а й підтримувані версії протоколів, параметри Diffie-Hellman, результати перевірок на відомі вразливості та ланцюжок сертифікатів. Якщо служба вразлива до Heartbleed, у банері з’являється opts.heartbleed з відповіддю тесту, а в opts.vulns — "CVE-2014-0160" (невразливий сервіс може містити запис з префіксом !, наприклад !CVE-2014-0160).
Підтримка шифрів EXPORT фіксується як CVE-2015-0204 (FREAK). У разі Logjam сканери намагаються встановити з’єднання з ефемерними DH-шифрами і, якщо це вдається, зберігають параметри dhparams (prime, public_key, bits, generator, fingerprint). Сканери також перевіряють прямі підключення з різними версіями (SSLv2, SSLv3, TLSv1.0, TLSv1.1, TLSv1.2) і записують підтримувані/непідтримувані версії в ssl.versions (де префікс - означає, що версія не підтримується). У полі ssl.chain зберігається ланцюжок сертифікатів у PEM-форматі. За допомогою цих даних легко знаходити пристрої з відомими вразливостями та оцінювати слабкі місця в налаштуваннях шифрування.
opts з Heartbleed:
dhparams при Logjam:
ssl.versions (підтримка/непідтримка версій):
"ssl": {
"versions": ["TLSv1", "SSLv3", "-SSLv2", "-TLSv1.1", "-TLSv1.2"]
}
Приклад пошукового запиту для знаходження вразливих до Heartbleed пристроїв у США:
country:US vuln:CVE-2014-0160
Для більшості служб сканери Shodan аналізують основний текст банера й витягують із нього корисну інформацію: наприклад, назви груп у MongoDB, знімки екрана з сервісів віддалених робочих столів або списки пірів Bitcoin. Існує дві просунуті методики аналізу, на які варто звернути окрему увагу — визначення веб-компонентів і каскадне (ланцюгове) сканування. Нижче — чітко структурований опис обох технік.
Сканери намагаються визначити технології, які використано для побудови сайту. Для модулів HTTP/HTTPS аналізують заголовки й HTML і зберігають результат у полі http.components. Це словник, де ключ — назва технології (наприклад, jQuery), а значення — словник із властивістю categories (список категорій, пов’язаних із цією технологією). Приклад структури:
Інтерпретація: поле http.components вказує, що сайт працює на CMS Drupal і використовує jQuery та PHP. Через REST API Shodan можна шукати за фільтром http.component та агрегувати дані за фасетами http.component і http.component_category для отримання статистики за технологіями й категоріями.
Якщо банер містить інформацію про інших пірів або інші IP-адреси (наприклад, список пір у DHT), сканери можуть автоматично ініціювати додаткове сканування для цих адрес. Це дозволяє виявляти додаткові хости, які безпосередньо не потрапили б у початковий набір перевірок.
Приклад банера DHT-вузла (mainline DHT для BitTorrent), що містить список пір:
DHT Nodes 97.94.250.250 58431 150.77.37.22 34149 113.181.97.227 63579 252.246.184.180 36408 83.145.107.53 52158 ...
Раніше сканер тілько збирав цей банер і рухався далі. При увімкненій каскадності він запускає захоплення банерів для кожного перерахованого піра (перевіряючи відповідний порт і протокол). Отже, одне первинне сканування може спричинити ланцюг дочірніх сканувань.
Щоб фіксувати, які дочірні запити походять від якого первинного сканування, у записах застосовуються два поля:
_shodan.id— унікальний ідентифікатор банера. Це поле присутнє, коли з цього банера може бути ініційовано каскадне сканування.
_shodan.options.referrer— унікальний ідентифікатор банера-«батька», який спричинив створення поточного банера (вказує, звідки пішло додаткове сканування).
Завдяки цим полям можна відтворити ланцюжки сканувань і побудувати карту взаємозв’язків між пристроями, виявленими під час автоматичного збору даних.
Переваги: каскадне сканування і детекція веб-компонентів дають ширше й глибше уявлення про мережеву інфраструктуру та стек технологій на сайтах.
Ризики: ланцюгові сканування можуть збільшувати мережеве навантаження й підвищувати шанс потрапляння до блок-листів через масові запити — тому при плануванні аналізу слід враховувати етичні та правові аспекти.
Найпростіший спосіб отримати доступ до даних Shodan — через веб-інтерфейс. Практично кожен інтерфейс дозволяє ввести пошуковий запит, тому спочатку — про те, як Shodan інтерпретує запити.
За замовчуванням пошук переглядає тільки основний текст банера і не шукає метадані всередині нього. Тобто запит Google поверне ті записи, де в самому банері зустрічається слово «Google» — це можуть бути, наприклад, пристрої з Google Search Appliance у мережах організацій, а не обов’язково офіційні сервіси Google.
Shodan прагне знайти записи, що відповідають усім умовам запиту: між значеннями працює логічне AND. Наприклад, apache + 1.3 еквівалентно apache 1.3.
Щоб шукати не тільки по тексту банера, а і по метаданих, використовують фільтри пошуку.
Фільтри — це спеціальні ключові слова для звуження результатів на основі метаданих служби чи пристрою. Формат фільтра:
Увага: між двокрапкою і значенням не повинно бути пробілу. Якщо значення містить пробіли — беріть його в лапки, наприклад:
Деякі фільтри дозволяють вказати кілька значень через кому. Наприклад, щоб знайти пристрої з Telnet на портах 23 і 1023:
Якщо фільтр не підтримує коми (наприклад port, hostname, net в деяких випадках), на практиці Shodan дає можливість подати кілька значень через повторення фільтра або інші синтаксичні варіанти — але найчастіше кома працює для port.
Щоб виключити результати, поставте мінус перед фільтром:
Приклад комбінованого запиту, що показує служби на порту 8080, в яких основний текст банера не порожній:
У Shodan кожен банер має числову властивість hash; для порожніх банерів це значення дорівнює нулю — тому -hash:0 відсікає пусті відповіді.
Нижче — кілька часто вживаних фільтрів (детальніше — у додатку B документації Shodan):
category— категорія служби (наприклад,ics,malware).
city— назва міста.
country— повна назва країни.
net— результати тільки з вказаного діапазону IP (у CIDR-нотації), наприклад:net:190.30.40.0/24
org— фільтрація за організацією, якій належить IP, наприклад:org:"Verizon Wireless"
Для швидкої точності комбінуйте текстовий пошук і фільтри: наприклад
apache port:80 country:"US".
Використовуйте лапки для значень із пробілами.
Виключення (
-filter:value) часто простіше, ніж побудова довгого позитивного запиту.
hashдопомагає відокремити порожні або однотипні банери від корисних записів.
Основний інтерфейс для доступу до даних Shodan — пошуковий рушій на https://www.shodan.io. За замовчуванням пошуковий запит переглядає дані, зібрані за останні 30 днів (на відміну від старого сайту, який шукав по всій базі). Отже, результати зі сайту відображають актуальну карту Інтернету на поточний момент.
Після виконання пошуку вгорі з’являється кнопка Download Data. Доступні формати експорту:
JSON — кожен рядок містить повний банер і всі метадані; зберігає всю доступну інформацію і найзручніший для подальшої обробки (підтримується CLI-клієнтом Shodan).
CSV — містить IP, порт, сам банер, організацію й імена хостів; корисний для швидкого імпорту в Excel, але інформації менше через обмеження формату.
XML — застарілий формат, займає більше місця і менш зручний у використанні.
Завантаження вимагає export credits (одноразова валюта, що купується на сайті). Одна кредит-монета дозволяє завантажити до 10 000 результатів. Згенеровані файли доступні в розділі Downloads на сайті.
Shodan дозволяє згенерувати звіт на основі пошукового запиту: графіки, таблиці та візуалізацію розподілу результатів по Інтернету. Звіт фіксується на момент генерації і не оновлюється автоматично при надходженні нових даних — це зручно для щомісячного порівняння змін. Розділ зі збереженими звітами відкривається кнопкою у верхньому правому куті.
Для пошуку специфічних пристроїв корисно використовувати готові запити з каталогу спільноти Shodan — користувачі діляться своїми запитами, описами та метками. Загальні запити допомагають початківцям швидко орієнтуватися. Увага: ці запити видимі всім — не публікуйте те, що не хочете показувати іншим.
Ідея приховати сервіс — запустити його на нестандартному порту — часто вважається «security by obscurity» і зазвичай неефективна. Наприклад, щоб знайти OpenSSH, що працює не на стандартному порту 22, використовують:
Фільтр product обмежує пошук до OpenSSH, а -port:22 виключає стандартні SSH-сервери. Згенерований звіт показує, які нестандартні порти використовуються найчастіше (приклад частот: 2222, 5000, 23, 26, 5555 і т.д.). Часто «випадковий» вибір порту виявляється неуникальним: порт 2222, наприклад, дуже поширений (часто через honeypot-конфігурації або типові налаштування провайдерів).
Аналіз банерів з однієї країни може виявити шаблони: наприклад, у Австралії багато пристроїв із OpenSSH на порту 5000 мають однакові SSH-ключі та старі версії OpenSSH (що свідчить про централізоване обладнання провайдера та потенційні ризики). Такі знахідки показують, що перенесення служби на нестандартний порт не гарантує безпеки і може дати хибне відчуття захищеності.
Пошуковий рушій Shodan дає потужні можливості: актуальні дані (30-денний зріз), експорт у зручних форматах, генерацію незмінних звітів і доступ до спільних запитів. Але при роботі важливо розуміти обмеження (формати експорту, вартість експорт-кредитів) і правильно інтерпретувати результати (наприклад, нестандартні порти часто не унікальні, а шаблони в банерах можуть вказувати на централізоване обладнання або Honeypot).
Сайт Карт Shodan дає змогу досліджувати результати пошуку візуально, а не в текстовому вигляді головного сайту. Карта відображає до 1000 результатів одночасно та автоматично уточнює пошуковий запит під ту область, на яку ви навели фокус (при збільшенні/зменшенні масштабу).
Усі фільтри та синтаксис пошуку, що працюють на основному сайті, також працюють і в картографічному інтерфейсі — можна застосовувати port:, country:, org: та інші фільтри, щоб звузити відображуваний набір міток на карті.
Коли ви змінюєте масштаб карти, Shodan підбирає та відображає тільки ті результати, які відповідають вашій поточній географічній області та поточним фільтрам. Це дозволяє швидко отримувати локалізовану картину інфраструктури без перегляду всієї бази.
Доступні кілька видів відображення карти — виберіть іконки, щільність міток чи кластеризацію. Натисніть кнопку поруч зі строкою пошуку, щоб побачити список варіантів і переключитись між ними за власними уподобаннями.
Сайт Уразливостей Shodan збирає відомості про вразливості та експлойти з джерел на кшталт CVE, Exploit-DB і Metasploit, щоб зробити їх доступними для пошуку через веб-інтерфейс. На відміну від основного рушія Shodan, цей проєкт дозволяє шукати не тільки в тексті банера, а в повній інформації про експлойт, включаючи метадані.
Фільтри пошуку на цьому сайті відрізняються від фільтрів інших проєктів Shodan: їх спроектовано так, щоб максимально спростити роботу користувача там, де це можливо. За замовчуванням пошук виконується по повному вмісту експлойта (включаючи метадані), що відрізняє цей інструмент від основного Shodan, який без додаткових фільтрів шукає лише по тексту банера.
Нижче — перелік основних фільтрів, які доступні для пошуку у розділі уразливостей:
author— автор уразливості або експлойта.
description— опис уразливості/експлойта.
platform— цільова платформа (наприклад:php,windows,linuxтощо).
type— тип уразливості/експлойта.
(Повний список фільтрів і їхні детальні описи доступні в інтерфейсі сайту Уразливостей.)
Сайт Зображення Shodan (Images) дозволяє легко переглядати скриншоти, які збирає Shodan. Цей інтерфейс спеціально орієнтований на фільтр has_screenshot і використовує той же синтаксис пошуку, що й основний пошуковий рушій Shodan.
Рядок пошуку зверху використовує звичні ключові слова й фільтри Shodan. Найефективніше застосовувати його для фільтрації за організацією (org) або діапазоном IP (net), але також можна звужувати результати за типом джерела зображень або іншими метаданими. Для відображення лише результатів із наявними скриншотами використовуйте:
Наприклад, щоб побачити скриншоти в межах певного мережевого блоку:
Дані для знімків збираються з п’яти різних джерел — кожне відповідає своїй службі/порту і має свій банер:
VNC (RFB)
Віддалений робочий стіл (RDP)
RTSP (стріми з відеопристроїв)
Веб-камери (HTTP/вебінтерфейси)
X Windows
Оскільки кожне джерело отримується з окремого порту/служби, у результатах можна фільтрувати за протоколом або підходящим текстом у банері. Наприклад:
для VNC використовують ключові слова, пов’язані з RFB;
для RTSP — шукають
rtsp;
для веб-камер — зазвичай фільтрують HTTP-сервіси з
has_screenshot:true(тобтоhttp has_screenshot:true).
Всі результати з скриншотами:
has_screenshot:true
Скриншоти з певного мережевого блоку:
net:198.51.100.0/24 has_screenshot:true
Скриншоти, пов’язані з RTSP:
rtsp has_screenshot:true
HTTP-сервери з доступними зображеннями (часто — веб-камери):
http has_screenshot:true
Через те, що скриншоти отримуються з різних сервісів і портів, відображені зображення можуть містити приватну або чутливу інформацію — при роботі з цими даними слід дотримуватися етичних і правових норм.
Shodan дає змогу побачити інтернет з іншого боку — не як набір сайтів, а як живу екосистему пристроїв і сервісів із власними “банерами”, метаданими та вразливостями. Якщо підходити до роботи з платформою з розумом — чітко формулювати запити, підбирати фільтри і перевіряти метадані — вона стане потужним інструментом для моніторингу, аналізу ризиків і швидкого виявлення проблем. Пам’ятайте про етику й обмеження: великі обсяги сканувань і необережне використання даних можуть нашкодити як вам, так і інфраструктурі.
Продовжимо далі — у наступній частині розберемо практичні приклади запитів і найкорисніші фільтри.