Что можно найти снаружи, не имея доступа к серверу
1. Что такое конфигурационный аудит
Анализ публично доступных HTTP-ответов и DNS-записей без аутентификации и активного вмешательства. Проверке подвергается только внешняя конфигурация: HTTP-заголовки, TLS/SSL, DNS, открытые порты.
Уязвимости не эксплуатируются, нагрузки на сервер нет.
2. Инструменты
curl — ответ HTTP сервера.
openssl s_client — проверка TLS-соединения.
dig — чтение DNS-записей домена.
/dev/tcp — выявление открытых портов без nmap
Всё это доступно на android через Termux, без root.
3. Объект и метод
Домен: любой, главное — разрешение владельца на аудит. В качестве цели взят продукт ИИ-генерации, поддомен Nellify — adorable-dodol-5ab32d.netlify.app
Время: ~15 минут. С скриптом автоматизации сокращается до 2-3 минут от проверки до формирования PDF-отчёта.
Метод: только публично доступные данные, без аутентификации и нагрузки на сервер.
4. HTTP Security Headers — что нашёл
Команда:
curl -s -D - adorable-dodol-5ab32d.netlify.app -o /dev/null | grep -i "security\|frame\|content-type\|referrer\|permissions"
Вывод:
content-type: text/html; charset=UTF-8strict-transport-security: max-age=31536000; includeSubDomains; preload
Конкретные выводы и их значение:
content-type: text/html — заголовок параметров сервера, к безопасности не относится.
**charset=UTF-8 strict-tranport-security**: max-age=31536000 — HSTS (см.ниже*) включён, память браузера об обязательном https соединении на 1 год
includeSubDomains — протокол HSTS распространяется на поддомены
preload — домен включен в предзагруженный в браузер список доменов с HSTS, т.е. HSTS стоит «по умолчанию».
HSTS (Strict-Tranport-Security) — инструкция для браузера всегда использовать https, даже при ручном вводе http://…/. Обеспечивает защиту от MITM атак.
Минимум для безопасности: max-age=31536000, для максимума добавить: includeSubDomains; preload
CSP (Content Security Policy) — белый список разрешённых источников для скриптов, изображений и т.п.
Без этого протокола возможно внедрение скрипта с любого домена — браузер выполнит. В целевом домене отсутствует — уязвимость.
Защита:
content-security-policy: default-src 'self'; script-src 'self'
Формальная защита (практически — бесполезная):
content-security-policy: default-src ( — разрешены все источники)
content-security-policy: script-src 'unsafe-inline' (unsafe-inline — встроенные скрипты разрешены).
X-Frame-Options — запрет встраивать страницу в iframe на чужом сайте. (iframe — HTML-элемент, окно внутри страницы, демонстрирующее другую страницу, например встроенное видео из YouTube или Google Map).
Без него возможен clickjacking — атака через iframe, основанная на взаимодействии с вредоносным скриптом, скрытым содержанием целевого сайта в окне iframe. В целевом домене отсутствует — уязвимость.
Защита:
x-frame-options: DENY (запрещено всем) или x-frame-options: SAMEORIGIN (разрешение только для своего домена).
X-Content-Type-Options — запрет браузеру угадывать тип файла. Без него браузер может интерпретировать content-type по-своему, что потенциально используется для использования вредоносных файлов как скриптов. Отсутствует — уязвимость.
Защита:
x-content-type-options: nosniff (nosniff — принудительное соблюдение content-type)
Referrer-Policy — контроль содержания отправляемых браузером данных по ссылке домена. Без него URL с токеном/эндпойнтом (адресом: https://…/path?options=secret\_token) утекает на следующий сайт. Отсутствует — уязвимость.
Защита:
referrer-policy: strict-origin-when-cross-origin (cross-origin — передача источника без пути и параметров: https://…/). При настройке same-origin передаётся полный URL, включая путь и параметры: https://…/path?options=secret\_token (уязвимость). При понижении c https на http с активным referrer-policy referrer не будет отправлен.
Permissions-Policy — список браузерных API (разрешений), использование которых допускается сайтом. Без него встроенный iframe может запросить доступ к камере/микрофону/геолокации пользователя. Отсутствует — уязвимость.
Защита:
permissions-policy: camera (), microphone (), geolocation ()
Пустые скобки — запрещено всем.
5. TLS — что нашёл
Протокол и шифр
Forward Secrecy — генерация уникального ключа для каждой TLS-сессии, который нигде не хранится. Перехваченный в прошлом трафик не будет расшифрован при наличии ключа. Сигнал наличия — ECDHE или DHE в названии шифра. В данном выводе включён по умолчанию в TLSv.1.3. через шифр TLS_AES.
Слабые шифры
Команда:
echo | openssl s_client -connect adorable-dodol-5ab32d.netlify.app:443 -cipher RC4 2>/dev/null | grep Cipher
echo | openssl s_client -connect adorable-dodol-5ab32d.netlify.app:443 -cipher 3DES 2>/dev/null | grep Cipher
Пустой вывод — отказ сервера использовать слабые шифры RC4 и 3DES
Срок сертификата
Команда:
echo | openssl s_client -connect adorable-dodol-5ab32d.netlify.app:443 -servername adorable-dodol-5ab32d.netlify.app 2>/dev/null | openssl x509 -noout -dates
Вывод:
notBefore=Feb 16 00:00:00 2026 GMTnotAfter=Mar 19 23:59:59 2027 GMT
Конкретные выводы и их значение:
notAfter — дата истечения срока сертификата, если дата notAfter в прошлом — уязвимость.
Самоподписанный сертификат
Команда:
echo | openssl s_client -connect adorable-dodol-5ab32d.netlify.app:443 -servername adorable-dodol-5ab32d.netlify.app 2>/dev/null | grep -i "self signed\|verify error"
Пустой вывод — сертификат выдан доверенным центром (Let’s Encrypt, DigiCert и др.)
Если вывод: verify error:num=18:self signed certificate — уязвимость.
6. DNS/Почта
Досупны только для собственных доменов, использование поддоменов не обеспечивает конфиденциальности трафика. Для целевого домена не применимо. Рассмотрение общих правил защиты.
SPF (Sender Policy Framework) — список серверов с разрешением отправлять почту от имени домена.
Команда:
dig +short TXT example.com
Вывод и его значение:
v=spf1 — версия
-all — reject (жёстко)*
~all — softfail (мягко)
?all — neutral (слабо)
+all — accept all (опасно)
Нет вывода — SPF не настроен
*при отсутствии перечисления серверов домен не используется для рассылки почты, корректная настройка для непочтового домена.
DKIM (DomainKeys Identified Mail) — цифровая подпись исходящих писем, проверка получателем подписи через DNS.
Команда:
dig +short TXT селектор._domainkey.example.com
Важно. Селектор — произвольное имя, выбранное владельцем домена при настройке DKIM. Для аудита нужно знать точное имя селектора. Если оно неизвестно, достоверно установить наличие DKIM не выйдет.
Вывод:
Найден — порядок.
Не найден — отсутствует или неверно указан селектор.
DMARC (Domain-based Message Authentication, Reporting and Conformance) — политика для писем, не прошедших SPF или DKIM.
Команда:
dig +short TXT _dmarc.example.com
Вывод и его значения:
p=none — только отчёты. Слабо.
p=quarantine — в спам. Приемлемо.
p=reject — отклонить. Защита.
Пустой вывод — DMARC не настроен.
Дополнительно:
adkim=s / aspf=s — (s — strict) требует строгого совпадения домена, поддомены не принимаются. Максимум контроля.
adkim=r / aspf=r (r — relaxed) мягкое, допускает совпадение по организационному домену, допускает поддомены. Риск обхода через поддомены.
sp=reject — защита поддоменов без собственного DMARC.
adkim — для DKIM.
aspf — для SPF.
7. Порты
Команда:
timeout 5 bash -c "echo >/dev/tcp/adorable-dodol-5ab32d.netlify.app/порт" 2>/dev/null && echo "открыт" || echo "закрыт"
Вывод и его значение:
|
Порт |
Служба |
Неожиданное открытие |
|---|---|---|
|
80 |
HTTP |
Норма при редиректе на 443 |
|
443 |
HTTPS |
Норма |
|
22 |
SSH |
Норма при доступе по ключу |
|
21 |
FTP |
Уязвимость |
|
3306 |
MySQL |
Уязвимость |
|
5432 |
PostgreSQL |
Уязвимость |
|
8080 |
Альернатива HTTP |
Норма при контроле доступа |
|
8443 |
Альтернатива HTTPS |
Норма при контроле доступа |
Проверка редиректа с 80 на 443:
curl -sI http://adorable-dodol-5ab32d.netlify.app | grep -i "location\|301\|302"
Вывод:
HTTP/1.1 301/302 — норма.
Нет — уязвимость.
8. Вывод
Уязвимости, выявленные аудитом за 10-15 минут без доступа к серверу:
|
Риск |
Находка |
|---|---|
|
Средний |
Нет CSP |
|
Низкий |
Нет X-Frame-Options |
|
Низкий |
Нет X-Content-Type-Options |
|
Низкий |
Нет Referrer-Policy |
|
Низкий |
Нет Permissions-Policy |
ссылка на оригинал статьи https://habr.com/ru/articles/1030924/