Вчера вечером клиент назвал, безумным, потому что у Google были кешированные версии информации личного сотрудника. Эта информация недоступна, если вы не авторизованы.
Они выполнили поиск Google для своего домена, например:
site:example.com
и заметил, что Googled просканировал и закрепил некоторые внутренние страницы.
Посмотрите на кешированные версии страниц:
Это кэш Google в https://example.com/(F (NSvQJ0SS3gYRJB4UUcDa1z7JWp7Qy7Kb76XGu8riAA1idys-nfR1mid8Qw7sZH0DYcL64GGiB6FK_TLBy3yr0KnARauyjjDL3Wdf1QcS-ivVwWrq-htW_qIeViQlz6CHtm0faD8qVOmAzdArbgngDfMMSg_N4u45UysZxTnL3d6mCX7pe2Ezj0F21g4w9VP57ZlXQ_6Rf-HhK8kMBxEdtlrEm2gBwBhOCcf_f71GdkI1))/ViewTransaction.aspx? TransactionNumber = 12345. Это снимок страницы, как он появился 15 сентября 2013 00:07:22 GMT
Меня смутил длинный URL. Вместо:
https://example.com/ViewTransaction.aspx?transactionNumber=12345
была вставлена длинная строка:
https://example.com/[...snip...]/ViewTransaction.aspx?transactionNumber=12345
Мне потребовалось несколько минут, чтобы помнить: это может быть признаком ASP.net "без cookie-сессий". Если ваш браузер не поддерживает Set-Cookie, веб-сайт будет вставлять cookie в URL-адрес.
Кроме того, наш сайт не использует это.
И даже если на нашем сайте были автоматически обнаружены файлы cookie, и Google удалось уговорить веб-сервер передать ему сеанс в URL-адресе, как он взял на себя другой сеанс пользователя?
Да, Google не вредоносный бот захватил сеанс
Сайт просканирован ботами в течение многих лет. И это прошлое 29 мая ничем не отличалось.
Обычно Google запускает обход, проверяя файл robots.txt (у нас его нет). Но никто не может ничего готовить на сайте (в том числе robots.txt) без предварительной аутентификации, поэтому он терпит неудачу:
Time Uri Port User Name Status
======== ======================= ==== ================ ======
1:33:04 GET /robots.txt 80 302 ;not authenticated, see /Account/Login.aspx
1:33:04 GET /Account/Login.aspx 80 302 ;use https plesae
1:33:04 GET /Account/Login.aspx 443 200 ;go ahead, try to login
Все это время Google искал файл robots.txt. Это никогда не было. Затем он возвращается, чтобы попытаться выполнить сканирование корня:
Time Uri Port User Name Status
======== ======================= ==== ================ ======
1:33:04 GET / 80 302 ;not authenticated, see /Account/Login.aspx
1:33:04 GET /Account/Login.aspx 80 302 ;use https plesae
1:33:04 GET /Account/Login.aspx 443 200 ;go ahead, try to login
И еще одна проверка robots.txt на защищенном сайте:
Time Uri Port User Name Status
======== ======================= ==== ================ ======
1:33:04 GET /robots.txt 443 302 ;not authenticated, see /Account/Login.aspx
1:33:04 GET /Account/Login.aspx 443 200 ;go ahead, try to login
И затем таблица стилей на странице входа:
Time Uri Port User Name Status
======== ======================= ==== ================ ======
1:33:04 GET /Styles/Site.css 443 200
И как работает каждый обход из GoogleBot, msnbot и BingBot. Роботы, логин, безопасность, логин. Никогда не получайте нигде, потому что он не может пройти мимо Аутентификация WebForms. И все хорошо с миром.
До одного дня; из ниоткуда
До одного дня появляется GoogleBot с файлом сессии в руке!
Time Uri Port User Name Status
======== ========================= ==== =================== ======
1:49:21 GET / 443 [email protected] 200 ;they showed up logged in!
1:57:35 GET /ControlPanel.aspx 443 [email protected] 200 ;now they're crawling that user stuff!
1:57:35 GET /Defautl.aspx 443 [email protected] 200 ;back to the homepage
2:07:21 GET /ViewTransaction.aspx 443 [email protected] 200 ;and here comes the private information
Пользователь, [email protected] не был зарегистрирован в течение дня. (Я надеялся, что IIS предоставил один и тот же идентификатор сеанса двум одновременным посетителям, разделенным повторной обработкой приложения). И наш сайт (web.config) не настроен для включения cookie без сеанса. И сервер (machine.config) не настроен для включения cookie без сеанса.
Итак:
- Как Google получил хэндл без сеанса?
- Как Google получил ahold действительного файла cookie без сеанса?
- Как Google задерживал действительный файл cookie без сеанса, принадлежащий другому пользователю?
Совсем недавно, как 1 октября (4 дня назад), GoogleBot все еще показывался, куки файлы в руке, регистрировались в качестве этого пользователя, обходили, кэшировали и публиковали некоторые свои личные данные.
Как Google не вредоносный веб-искатель обходит аутентификацию WebForms?
IIS7, Windows Server 2008 R2, один сервер.
Теория
Сервер не настроен на предоставление cookieless сессий. Но игнорируя этот факт, как Google может обходить аутентификацию?
- GoogleBot создает веб-сайт и пытается использовать произвольные имена пользователей и пароли (маловероятно, что в журналах нет попыток входа в систему)
- GoogleBot решил вставить случайный cookieless-сеанс в строку url, и это совпадало с сеансом существующего пользователя (маловероятно)
- Пользователю удалось выяснить, как сделать веб-сайт IIS возвратом cookieless-url (вряд ли), а затем вставить этот URL-адрес на другой веб-сайт (вряд ли), где Google обнаружил cookieless-url и выполнил сканирование
- Пользователь работает через мобильный прокси (а это не так). Прокси-сервер не поддерживает файлы cookie, поэтому IIS создает сеанс cookieless. Тот (к примеру, Opera Mobile) был взломан (не вероятно), и все кэшированные ссылки размещены на форуме хакеров. GoogleBot просканировал форум хакеров и начал следить за всеми ссылками; включая наш
[email protected]cookieless url сеанса. - У пользователя есть вирус, которому удается уговорить любые веб-серверы IIS, чтобы передать файл cookieless. Затем этот вирус возвращается в штаб-квартиру. URL-адреса отправляются на общедоступный ресурс, который сканирует GoogleBot. GoogleBot затем появляется на нашем сервере с файлом cookieless.
Никто из них не правдоподобен.
Как Google нехитрый веб-искатель обходит проверку WebForms и захватывает существующий сеанс пользователя?
Что вы спрашиваете?
Я даже не знаю, как веб-сайт ASP.net, который не настроен на предоставление cookieless-сессий, может выдавать cookieless сеанс. Возможно ли обратное преобразование идентификатора сеанса на основе файлов cookie в идентификатор сеанса на основе cookieless? Я мог бы процитировать соответствующий раздел <sessionState> web.config и machine.config, и показать, что не существует
<sessionState cookieless="true">
Как веб-сервер решил, что браузер не поддерживает файлы cookie? Я попытался заблокировать файлы cookie в Chrome, и мне никогда не давали идентификатор сеанса cookie-less. Могу ли я имитировать браузер, который не поддерживает файлы cookie, чтобы убедиться, что мой сервер не выдал cookieless сессий?
Определяет ли сервер cookieless сеансы с помощью строки User-Agent? Если это так, я могу установить Internet Explorer с поддельным UA.
Идентифицирует ли идентификатор сеанса в ASP.net исключительно cookie? Может ли кто-либо из любого IP-адреса с помощью cookie-url получить доступ к этой сессии? Не учитывает ли ASP.net, по умолчанию, также?
Если ASP.net делает связывание IP-адреса с сеансом, не означает ли это, что сеанс не мог возникнуть у сотрудника на своем домашнем компьютере? Потому что тогда, когда искатель GoogleBot попытался использовать его с IP-адреса Google, он не сработал?
Были ли какие-либо экземпляры в любом месте (помимо того, что я связал) ASP.net, выдавая cookieless-сессии, когда он не настроен? Есть ли проблема с Microsoft Connect?
Известно ли, что проверка подлинности в Web-Forms имеет проблемы и не должна использоваться для обеспечения безопасности?
Чтение бонусов
Изменить. Удалено имя Google бота, который обошел привилегию, поскольку люди - штаны с задержкой головы; путайте Google имя искателя для чего-то другого. Я использую Google имя искателя в качестве напоминания о том, что это был не вредоносный веб-искатель, который смог просканировать его в другой сеанс WebForm пользователя. Это можно сравнить с вредоносным искателем, пытающимся проникнуть в другой сеанс пользователя. Ничто не похоже на педант, чтобы выявить обострение.