
Whois для облака: Инструмент разведки для определения принадлежности к облачным провайдерам. Поддерживает AWS, Azure, Google, Cloudflare и Digital Ocean.
Проверьте IP, чтобы определить облачного провайдера и другие детали на основе опубликованных провайдером данных в форматах JSON, CSV или текстовых файлов
Cloud edge — это инструмент разведки, ориентированный на исследование облачных провайдеров. Он может использоваться для атрибуции и криминалистики в облаке, пентестов, охоты за багами, red teaming или общего исследования и разработки облачных провайдеров. Edge автоматически загружает опубликованные файлы диапазонов IP-адресов облачных провайдеров (AWS, Azure, GCP, Cloudflare, Digital Ocean) и выполняет поиск по префиксу на основе введённого IP-адреса. Может быть интегрирован с другими инструментами разведки. При пентесте сети в условиях чёрного ящика edge быстро определяет, у какого облачного провайдера размещён заказчик, или просто перепроверяет границы по правилам взаимодействия. Каждый из этих провайдеров публикует список всех своих IP-префиксов и/или сетевых блоков. Для Azure и AWS добавляется регион/центр обработки данных и название сервиса. Это отличное обогащение для threat intelligence, позволяющее сопоставлять IP-адреса с физическими дата-центрами и облачными сервисами. Cloud Edge может быть полезен в рабочих процессах разведки, чтобы быстро понять, «с чем вы имеете дело» — он быстро парсит и выполняет поиск на основе IP-префикса.

Несколько заметок о том, как инструмент работает с вводом и выводом.
Запустите Cloud Edge, и он автоматически загрузит все поддерживаемые файлы облачных провайдеров. Если файлы не существуют в рабочем каталоге, они будут загружены:
% ./edge
[INF] Starting Cloud Edge version 0.2.4
[INF] File cloud.json has been downloaded and created
[INF] File aws.json has been downloaded and created
[INF] File cloudflare-ipv4.txt has been downloaded and created
[INF] File cloudflare-ipv6.txt has been downloaded and created
[INF] File digitalocean.csv has been downloaded and created
[INF] File azure.json has been downloaded and created
Если вы офлайн и их невозможно загрузить, проверьте каталог csp-files в этом репозитории. Скопируйте их в рабочий каталог.
При первом запуске инструмент автоматически пытается загрузить и загрузить в память шесть файлов диапазонов IP-адресов облачных провайдеров в форматах JSON, текстовых и CSV в рабочий каталог. Вот как это работает:
По умолчанию он пытается загрузить шесть файлов с указанных ниже URL, если файлы уже не находятся в рабочем каталоге.
Cloud Edge проверяет каждый файл перед загрузкой. Поэтому если файл уже существует, он, очевидно, не будет загружаться повторно, если только вы его не удалите.
Эти шесть файлов включены в данный репозиторий GitHub в каталоге csp-files. Поскольку облачные провайдеры часто обновляют свои списки, убедитесь, что у вас самые последние файлы, удалив файлы в рабочем каталоге: aws.json, azure.json, cloud.json, cloudflare-ipv4.txt, cloudflare-ipv6.txt, digitalocean.csv.
Если файлы найдены в рабочем каталоге, все IP-префиксы загружаются в память. Файлы диапазонов IP облачных провайдеров всегда пытаются загрузиться из рабочего каталога. Фактический поиск включается с помощью флага -prefix.
Когда включён режим -dns, DNS-запросы как для A, так и для CNAME записей буферизируются без отображения до завершения всех DNS-запросов. После завершения запросов вывод отображается.
По умолчанию вывод показывает информационные сообщения, начинающиеся с [INF]. Это можно отключить с помощью флага -silent. Вывод будет выглядеть так:
./edge -single 140.179.144.130
[INF] Single IP prefix lookup of 140.179.144.130
[INF] Matched IP [140.179.144.130] to Cloud Provider via prefix [AWS:140.179.144.128/25]
[INF] Matched IP [140.179.144.130] to Cloud Service [API_GATEWAY] and Region [cn-north-1]
140.179.144.130,Provider:AWS;Prefix:140.179.144.128/25;Region:cn-north-1;Service:API_GATEWAY
Информационные сообщения сообщат, найдена ли запись через DNS-запись 'A', DNS-запись 'CNAME', сертификат (crt.sh) или найдено совпадение по префиксу. Совпадения по префиксу укажут обнаруженного облачного провайдера с соответствующим префиксом, а также облачный сервис и регион, если применимо. Регионы Azure в настоящее время не определяются, а AWS — да.
В режиме -dns или crt вывод по умолчанию отправляется в консоль в виде результатов, разделённых запятыми. Это упрощает использование других инструментов для разбора этих результатов.
FQDN,IP,SOURCE,CNAME,DESCRIPTION
-prefix.В режиме -prefix с -ip или -nmap вывод по умолчанию отправляется в консоль в виде результатов, разделённых запятыми:
IP,DESCRIPTION
IP — это IP-адрес, а DESCRIPTION — результаты поиска по диапазонам IP-адресов в файлах JSON облачных провайдеров, если применимо.
В режиме -ptr с ip или nmap вывод по умолчанию отправляется в консоль в виде результатов, разделённых запятыми:
IP,PTR
IP — это IP-адрес, а PTR — результаты DNS-запроса PTR, если он найден.
Флаг -ip указывает на необходимость итерации по списку IP-адресов и может использоваться в режиме prefix или ptr. Когда вы запускаете инструмент с -ip <hosts.txt>, он ожидает, что каждый IP-адрес находится на отдельной строке, и будет перебирать список, выполняя поиск. Вот пример содержимого файла:
user@host:~/demo$ cat ip.txt
3.133.110.237
18.117.232.92
18.221.247.211
3.137.199.52
Флаг -nmap указывает на необходимость разбора файла nmap XML. Он будет искать любой хост в файле сканирования nmap, помеченный как "Up". Например, -nmap scan1.xml укажет инструменту разобрать файл scan1.xml и найти все хосты, помеченные nmap как Up. Затем вы запускаете его с -ptr или -prefix для поиска IP.
Инструмент выполняет классическое перечисление поддоменов, перебирая словарь, содержащий имена хостов, по одному на строку. Это используется в режиме -dns с -wordlist <hosts.txt>. Пример того, как это выглядит для файла hosts.txt:
user@host:~/demo$ more subdomains-5k.txt
www
blog
news
blogs
en
online
$ edge -help
Usage of edge:
-crt
Certificate transparency lookup mode
-csv string
Output results to CSV file
-dns
A and CNAME record lookup mode
-domain string
The domain to perform guessing against.
-ip string
The text file to use with IP addresses
-nmap string
Nmap scan xml file to use.
-output
Enable output to CSV
-prefix
IP Prefix CSP lookup mode
-ptr
PTR lookup mode
-resolver string
The DNS server to use. (default "8.8.8.8:53")
-silent
Enable silent mode to suppress [INF]
-single string
Single IP address to do a prefix lookup
-verbose
Enable verbose output
-wordlist string
The wordlist to use for guessing.
-workers int
The amount of workers to use. (default 10)
Пример №1: Поиск одного IP-адреса
edge -single <ip_address>
Описание: Выполнить поиск по префиксу одного IP-адреса, переданного с помощью <ip_addr>, по файлам JSON облачного провайдера.
Пример вывода:
edge -single 140.179.144.130
[INF] Single IP prefix lookup of 140.179.144.130
[INF] Matched IP [140.179.144.130] to Cloud Provider via prefix [AWS:140.179.144.128/25]
[INF] Matched IP [140.179.144.130] to Cloud Service [API_GATEWAY] and Region [cn-north-1]
140.179.144.130,Provider:AWS;Prefix:140.179.144.128/25;Region:cn-north-1;Service:API_GATEWAY
Пример №2: Поиск одного IP-адреса с подавлением информационных сообщений
$ edge -single <ip_address> -silent
Описание: То же, что и выше, но включён тихий режим. Это подавляет сообщения [INF] с дополнительной информацией.
Пример вывода:
edge -single 140.179.144.130
140.179.144.130,Provider:AWS;Prefix:140.179.144.128/25;Region:cn-north-1;Service:API_GATEWAY
Пример №3: Использование локальных файлов провайдера JSON вместо их загрузки.
edge -single <ip_address> -silent -nd
Описание: Не пытаться загружать файлы провайдера JSON, а использовать локальные файлы в рабочем каталоге.
Пример №4: Перечисление поддоменов по словарю с проверкой прозрачности сертификатов и поиском по префиксу.
edge -domain <domain> -dns -crt -prefix -wordlist <wordlist.txt>
Описание: Выполнить перечисление поддоменов по словарю всех A и CNAME записей на основе wordlist.txt для домена с проверкой прозрачности сертификатов. Для каждого найденного хоста через прозрачность сертификатов также выполнить DNS-запрос. Выполнить поиск по префиксу IP-адреса по опубликованным спискам IP-префиксов всех трёх облачных провайдеров.
Пример вывода:
edge -domain tesla.com -dns -crt -prefix -wordlist subdomains-5k.txt
[INF] Found host via crt.sh [nas-origin.tesla.com]
nas-origin.tesla.com,,Certificate,,
[INF] Found host via crt.sh [eua-origin.tesla.com]
eua-origin.tesla.com,,Certificate,,
[INF] Found host via CNAME [fleetview.prd.na.fn.tesla.com.:fleetview.prd.usw2.fn.tesla.com]
fleetview.prd.na.fn.tesla.com.,,CNAME,fleetview.prd.usw2.fn.tesla.com,
[INF] Found host via CNAME [fleetview.prd.usw2.fn.tesla.com.:a69ff530d53f14d8e8059a3aee44e9ab-1848028946.us-west-2.elb.amazonaws.com]
fleetview.prd.usw2.fn.tesla.com.,,CNAME,a69ff530d53f14d8e8059a3aee44e9ab-1848028946.us-west-2.elb.amazonaws.com,
[INF] Found host via A [a69ff530d53f14d8e8059a3aee44e9ab-1848028946.us-west-2.elb.amazonaws.com:52.39.128.70]
[INF] Matched Cloud Provider via prefix [AWS:52.36.0.0/14]
[INF] Matched IP [52.39.128.70] to Cloud Service [EC2] and Region [us-west-2]
Пример №5: Перечисление поддоменов по словарю без проверки прозрачности сертификатов или поиска по префиксу IP.
edge -domain <domain> -dns -wordlist <wordlist.txt>
Описание: Выполнить только сканирование по словарю всех A и CNAME записей на основе wordlist.
Пример вывода:
edge -domain tesla.com -dns -wordlist subdomains-5k.txt
[INF] Found host via CNAME [fleetview.prd.na.fn.tesla.com.:fleetview.prd.usw2.fn.tesla.com]
fleetview.prd.na.fn.tesla.com.,,CNAME,fleetview.prd.usw2.fn.tesla.com,
[INF] Found host via A [e9056.b.akamaiedge.net:23.2.254.58]
e9056.b.akamaiedge.net,23.2.254.58,A,teslamotors.vanity3.ca1.qualtrics.com,
Пример №6: Перечисление поддоменов по словарю без проверки прозрачности сертификатов, но с поиском по префиксу IP для любых найденных IP-адресов.
edge -domain <domain> -dns -wordlist <wordlist.txt> -prefix
Описание: Выполнить только сканирование по словарю всех A и CNAME записей на основе wordlist. Для каждого перечисленного IP-адреса выполнить поиск по префиксу.
Пример №7: Поиск в журналах прозрачности сертификатов.
edge -domain <domain> -crt
Описание: Выполнить поиск в журналах прозрачности сертификатов с помощью https://crt.sh
Пример вывода:
edge -domain tesla.com -crt
[INF] Running certificate transparency lookup crt.sh
[INF] Found host via crt.sh [solarbonds.tesla.com]
solarbonds.tesla.com,,Certificate,,
[INF] Found host via crt.sh [energydesk.tesla.com]
energydesk.tesla.com,,Certificate,,
Пример №8: Прозрачность сертификатов с DNS-запросом
edge -domain <domain> -dns -crt
Описание: Выполнить поиск в журналах прозрачности сертификатов. Для каждого хоста, обнаруженного через прозрачность сертификатов, выполнить полный DNS-запрос A или CNAME.
Пример №9: Поиск по префиксу IP со списком IP-адресов
edge -prefix -ip <ip-hosts.txt>
Описание: Выполнить поиск IP-адреса по префиксу облачного провайдера. Принимает список IP-адресов в ip-hosts.txt и просматривает его, выполняя поиск. Один IP-адрес на строку.
Пример вывода:
edge -prefix -ip ip-hosts.txt
[INF] Matched IP [140.179.144.130] to Cloud Provider via prefix [AWS:140.179.144.128/25]
[INF] Matched IP [140.179.144.130] to Cloud Service [API_GATEWAY] and Region [cn-north-1]
140.179.144.130,Provider:AWS;Prefix:140.179.144.128/25;Region:cn-north-1;Service:API_GATEWAY
[INF] Matched IP [18.189.124.22] to Cloud Provider via prefix [AWS:18.189.0.0/16]
[INF] Matched IP [18.189.124.22] to Cloud Service [EC2] and Region [us-east-2]
18.189.124.22,Provider:AWS;Prefix:18.189.0.0/16;Region:us-east-2;Service:EC2
[INF] Matched IP [20.60.128.132] to Cloud Provider via prefix [Azure:20.60.0.0/16]
[INF] Matched IP [20.60.128.132] to Cloud Service [AzureStorage]
20.60.128.132,Provider:Azure;Prefix:20.60.0.0/16;Name:Storage;ID:Storage;Platform:Azure;SystemService:AzureStorage
Пример №10: DNS PTR-запрос со списком IP-адресов
edge -ptr -ip <ip-hosts.txt>
Описание: Выполняет DNS PTR-запрос на основе IP-адреса в каждой строке ip-hosts.txt.
Пример вывода:
edge -ptr -ip ip-hosts.txt
140.179.144.130,ec2-140-179-144-130.cn-north-1.compute.amazonaws.com.cn.
Пример №11: Разбор файла nmap и поиск по префиксу найденных IP-адресов
edge -prefix -nmap <results.xml>
Описание: Разбирает XML-файл сканирования nmap, определяя все хосты "Up". Для каждого хоста "Up" в результатах сканирования nmap выполнить поиск по префиксу IP для облачного провайдера.
Пример №12: Разбор файла nmap и выполнение DNS PTR-запроса для каждого найденного IP-адреса
edge -ptr -nmap <results.xml>
Описание: Разбирает XML-файл сканирования nmap и выполняет PTR-запрос для каждого хоста "Up".
Пример №13: Добавление параллелизма с 100 рабочими потоками для повышения производительности
edge -domain <domain> -dns -wordlist <wordlist.txt> -workers 100
Описание: Использует параллельное сканирование DNS с 100 рабочими потоками. Это увеличивает скорость сканирования. Рабочих потоков по умолчанию: 10.
Пример №14: Указание DNS-резолвера
edge -domain <domain> -dns -wordlist <wordlist.txt> -resolver 8.8.4.4:53
Описание: Указать DNS-резолвер 8.8.4.4 на порту 53. По умолчанию используется 8.8.8.8.
Вы можете взять предварительно скомпилированные бинарные файлы или собрать самостоятельно. Убедитесь, что вы также получили файлы JSON с IP-префиксами облачных провайдеров.
Протестировано и собрано с go 1.25
$ git clone https://github.com/iknowjason/edge.git
$ cd edge
~/edge$ go build edge.go
~/edge$ ./edge (Проверить)
@mosesrenegade за вдохновение для инструмента
@0xdabbad00 за общие инструменты и вдохновение для AWS
Этот инструмент был вдохновлён множеством других инструментов и авторов, включая dnsrecon и gobuster. Да, я знаю. Не так уж много нового — просто ещё один инструмент для перечисления поддоменов. Я просто очень хотел изучить Golang :-)
Книга "Black Hat Go"
| Провайдер | Локальный файл | Удаленный URL |
|---|
| AWS | aws.json | https://ip-ranges.amazonaws.com/ip-ranges.json |
| Azure | azure.json | https://azservicetags.azurewebsites.net/ |
| GCP | cloud.json | https://www.gstatic.com/ipranges/cloud.json |
| Cloudflare | cloudflare-ipv4.txt | https://www.cloudflare.com/ips-v4/# |
| Cloudflare | cloudflare-ipv6.txt | https://www.cloudflare.com/ips-v6/# |
| Digital Ocean | digitalocean.csv | https://digitalocean.com/geo/google.csv |