Примеры логинов и паролей: что это, как создать и где лучше хранить

Содержание

Перехват паролей пользователей с помощью Wireshark

Многие пользователи и не догадываются, что заполняя логин и пароль при регистрации или авторизации на закрытом Интернет-ресурсе и нажимая ENTER, эти данные легко могут перехватить. Очень часто они передаются по сети не в защищенном виде. Поэтому если сайт, на котором вы пытаетесь авторизоваться, использует HTTP протокол, то очень просто выполнить захват этого трафика, проанализировать его с помощью Wireshark и далее с помощью специальных фильтров и программ найти и расшифровать пароль.

Лучшее место для перехвата паролей – ядро сети, где ходит трафик всех пользователей к закрытым ресурсам (например, почта) или перед маршрутизатором для выхода в Интернет, при регистрациях на внешних ресурсах. Настраиваем зеркало и мы готовы почувствовать себя хакером.

Шаг 1. Устанавливаем и запускаем Wireshark для захвата трафика

Иногда для этого достаточно выбрать только интерфейс, через который мы планируем захват трафика, и нажать кнопку Start. В нашем случае делаем захват по беспроводной сети.

Захват трафика начался.

Шаг 2. Фильтрация захваченного POST трафика

Открываем браузер и пытаемся авторизоваться на каком-либо ресурсе с помощью логина и пароля. По завершению процесса авторизации и открытия сайта мы останавливаем захват трафика в Wireshark. Далее открываем анализатор протоколов и видим большое количество пакетов. Именно на этом этапе большинство ИТ-специалистов сдаются, так как не знают, что делать дальше. Но мы знаем и нас интересуют конкретные пакеты, которые содержат POST данные, которые формируются на нашей локальной машине при заполнении формы на экране и отправляются на удаленные сервер при нажатии кнопки «Вход» или «Авторизация» в браузере.

Вводим в окне специальный фильтр для отображения захваченных пакетов: http.request.method == “POST”

И видим вместо тысячи пакетов, всего один с искомыми нами данными.

Шаг 3. Находим логин и пароль пользователя

Быстрый клик правой кнопки мыши и выбираем из меню пункт Follow TCP Steam


После этого в новом окне появится текст, который в коде восстанавливает содержимое страницы. Найдем поля «password» и «user», которые соответствуют паролю и имени пользователя. В  некоторых случаях оба поля будут легко читаемы и даже не зашифрованы, но если мы пытаемся захватить трафик при обращении к очень известным ресурсам типа: Mail.ru, Facebook, Вконтакте и т.д., то пароль будет закодирован:

HTTP/1.1 302 Found

Date: Mon, 10 Nov 2014 23:52:21 GMT

Server: Apache/2.2.15 (CentOS)

X-Powered-By: PHP/5.3.3

P3P: CP=»NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM»

Set-Cookie: non=non; expires=Thu, 07-Nov-2024 23:52:21 GMT; path=/

Set-Cookie: password=e4b7c855be6e3d4307b8d6ba4cd4ab91; expires=Thu, 07-Nov-2024 23:52:21 GMT; path=/

Set-Cookie: scifuser=networkguru; expires=Thu, 07-Nov-2024 23:52:21 GMT; path=/

Location: loggedin.php

Content-Length: 0

Connection: close

Content-Type: text/html; charset=UTF-8

Таким образом, в нашем случае:

Имя пользователя: networkguru

Пароль: e4b7c855be6e3d4307b8d6ba4cd4ab91

Шаг 4. Определение типа кодирования для расшифровки пароля

Заходим, например, на сайт http://www.onlinehashcrack.com/hash-identification.php#res и вводим наш пароль в окно для идентификации. Мне выдан был список протоколов кодирования в порядке приоритета:

Шаг 5. Расшифровка пароля пользователя

На данном этапе можем воспользоваться утилитой hashcat:

~# hashcat -m 0 -a 0 /root/wireshark-hash.lf /root/rockyou.txt

На выходе мы получили расшифрованным пароль: simplepassword

Таким образом, с помощью Wireshark мы можем не только решать проблемы в работе приложений и сервисов, но и также попробовать себя в роли хакера, осуществляя перехват паролей, которые пользователи вводят в веб-формах. Также можно узнавать и пароли к почтовым ящикам пользователей, используя незатейливые фильтры для отображения:

  • Протокол POP и фильтр выглядит следующим образом: pop.request.command == «USER» || pop.request.command == «PASS»
  • Протокол IMAP и фильтр будет: imap.request contains «login»
  • Протокол SMTP и потребуется ввод следующего фильтра: smtp.req.command == «AUTH»

и более серьезные утилиты для расшифровки протокола кодирования.

Шаг 6. Что делать, если трафик зашифрован и используется HTTPS?

Для ответа на этот вопрос есть несколько вариантов.

Вариант 1. Подключиться в разрыв соединения между пользователем и сервером и захватить трафик в момент установления соединения (SSL Handshake). В момент установки соединения можно перехватить сеансовый ключ.

Вариант 2. Вы можете расшифровать трафик HTTPS, используя файл журнала сеансовых ключей, записываемый Firefox или Chrome. Для этого браузер должен быть настроен на запись этих ключей шифрования в файл журнала (пример на базе FireFox), и вы должны получить этот файл журнала. По сути, необходимо похитить файл с ключом сессии с жесткого диска другого пользователя (что является незаконным). Ну а далее захватить трафик и применить полученный ключ для его расшифровки.

Уточнение. Мы говорим о веб-браузере человека, у которого пытаются украсть пароль. Если же мы подразумеваем расшифровку нашего собственного HTTPS трафика и хотим потренироваться, то эта стратегия будет работать. Если вы пытаетесь расшифровать HTTPS трафик других пользователей без доступа к их компьютерам, это не сработает – на то оно и шифрование, и личное пространство.

После получения ключей по варианту 1 или 2 необходимо прописать их в WireShark:

  1. Идем в меню Edit – Preferences – Protocols – SSL.
  2. Ставим флаг «Reassemble SSL records spanning multiple TCP segments».
  3. «RSA keys list»  и нажимаем Edit.
  4. Вводим данные во все поля и прописываем путь в файлу с ключом

WireShark может расшифровывать пакеты, которые зашифрованы с использованием алгоритма RSA. В случае если используются алгоритмы DHE/ECDHE, FS, ECC, сниффер нам не помощник.

Вариант 3. Получить доступ к web-серверу, которым пользуется пользователь, и получить ключ. Но это является еще более сложной задачей. В корпоративных сетях с целью отладки приложений или контент фильтрации этот вариант реализуется на легальной основе, но не с целью перехвата паролей пользователей.

БОНУС

ВИДЕО: Wireshark Packet Sniffing Usernames, Passwords, and Web Pages

См. также:

Надежный пароль — это основа безопасности — Новости — К Телеком, Серов

Провайдер «К Телеком» предоставляет Вам надежный интернет, и мы хотим, чтобы Вы были защищены.

Для того, чтобы Ваше соединение было безопасно, мы настоятельно рекомендуем использовать сложные логин и пароль.

При заключении договора каждому абоненту выдаются реквизиты подключения:

  1. 1. VPN реквизиты для подключения к Интернет. Используя их, абонент выходит в сеть.
  2. 2. Реквизиты для входа в Личный кабинет и мобильное приложение «Мой К Телеком». Используя их, абонент может управлять договором, просматривать статистику и платежи.

В договоре эти реквизиты можно увидеть в п. 11 «Пользователю выделены следующие реквизиты доступа». Здесь прописаны VPN-логин и VPN-пароль, а также логин для статистики и пароль для статистики.

Надежный пароль — это основа безопасности.

Некоторые пользователи создают очень простой пароль или делают его идентичным логину.

Такие комбинации логинов и паролей взламываются за несколько секунд.

Таким образом мошенники могут использовать реквизиты пользователя в своих целях.


Какие пароли нельзя использовать:

  1. 1. Пароль не должен совпадать с логином. Мошенникам достаточно будет подобрать логин, пароль они уже будут знать.
  2. 2. Буквы и цифры идущие подряд по раскладке клавиатуры (примеры: 123456, qaz123, qwerty, 123321 и т.д.)
  3. 3. Не используйте слова и устойчивые словосочетания в пароле (например: password, SpiderMan). Такие пароли используют тысячи людей и об этом отлично осведомлены мошенники. Взломать такой пароль не составит труда.
  4. 4. Имена, клички, дату рождения и их комбинации. Мошенники достаточно легко смогут получить доступ к этой информации и подобрать ваш пароль.

Если Ваш случай описан в одном из вышеперечисленных пунктов, то для обеспечения безопасного доступа в интернет мы просим Вас изменить свой пароль на более сложный.


Для того, чтобы изменить пароль самостоятельно, Вам необходимо зайти в Личный кабинет: https://stat.k-telecom.org/main и поменять пароль.


Как создавать надежные пароли:

  1. 1. Используйте не менее 8 символов в подборе. В идеале, чем больше, тем лучше, так как каждый дополнительный символ в несколько раз увеличивает время взлома пароля путем перебора.
  2. 2. Используйте заглавные и строчные буквы, цифры и символы. Это также в несколько раз увеличит сложность взлома вашего пароля.
  3. 3. Придумайте правило создания пароля и используйте его. Например, вначале и в конце вашего привычного пароля добавьте случайные символы и буквы (пример #[email protected])
  4. 4. Если есть возможность сгенерируйте пароль с помощью специальных сервисов.

 

С заботой, Ваш К Телеком.

Скрытие логина и пароля в коде Python

Шифр Цезаря быстренько вскроет любой сообразительный студент вроде меня.

Мухи отдельно, котлеты отдельно: просто не пишите пароль внутри кода, и проблема будет решена сама собой. Кроме того, для подключения к какой-нибудь другой базе данных не нужно будет редактировать код, что повышает удобство. А вот где тогда писать пароль — тут уже много вариантов.

Переменная окружения

В любой «взрослой» ОС есть некие глобальные переменные, именуемые переменными окружения (переменные среды, environment variables). Можно положить пароль туда, а в питоне читать эти переменные. Как менять переменные окружения, зависит от конкретной ОС (можно детали в Википедии почитать), а в коде Python их чтение может выглядеть как-нибудь так:

import os, pymysql
conn = pymysql.connect(
    host="xxc.ru",
    user=os.getenv('MYSQL_USER'),
    password=os.getenv('MYSQL_PASSWORD'),
    # ...
)

В данном примере логин читается из переменной окружения MYSQL_USER, а пароль из MYSQL_PASSWORD.

Простой текстовый файл

Суть проста: пишем пароль в любом текстовом редакторе, сохраняем в текстовый файл, а потом читаем этот файл в питоне.

with open('mysql_user.txt', 'r', encoding='utf-8-sig') as fp:
    mysql_user = fp.read().rstrip()

with open('mysql_password.txt', 'r', encoding='utf-8-sig') as fp:
    mysql_password = fp.read().rstrip()

conn = pymysql.connect(
    host="xxc.ru",
    user=mysql_user,
    password=mysql_password,
    # ...
)

В данном примере логин и пароль читаются из файлов mysql_user.txt и mysql_password.txt, находящихся в текущем каталоге.

Немного пояснений, почему я читаю файлы именно так:

  • правила хорошего тона предписывают явно закрывать открытые файлы после их использования. Это очень удобно делать с помощью конструкции with;

  • UTF-8 — самая лучшая кодировка на свете, поэтому я прописал её и советую её использовать везде и всегда. Но есть нюанс: виндовый Блокнот добавляет BOM в начале текстового файла, и для его корректной обработки питоном я прописал кодировку utf-8-sig, а не просто utf-8;

  • некоторые текстовые редакторы добавляют перенос строки в конце файла, поэтому я его удаляю с помощью rstrip(), чтоб не мешался.

Полноценный файл конфигурации

Высока вероятность, что вы захотите хранить отдельно от кода не только логин и пароль, так почему бы не завести полноценный конфиг? Можно создать, к примеру, такой файл config.ini:

[mysql]
user = логин
password = пароль

А потом распарсить его в питоне:

import configparser, pymysql
config = configparser.ConfigParser()
config.read('config.ini', encoding='utf-8-sig')

conn = pymysql.connect(
    host="xxc.ru",
    user=config.get('mysql', 'user'),
    password=config.get('mysql', 'password'),
    # ...
)

ConfigParser — очень мощная и универсальная штука; рекомендую почитать документацию хотя бы для общего развития.

Если вы захотите выложить свой код публично на какой-нибудь GitHub, не забудьте добавить свои файлы со всеми паролями в .gitignore, чтобы случайно не опубликовать и их тоже.

Python-модуль с переменными

Можно создать Python-файл, например, local_settings.py, прописать в нём переменные с логином и паролем:

MYSQL_USER = 'Вася'
MYSQL_PASSWORD = '123456'

И потом обращаться к ним после импорта:

import local_settings as settings

conn = pymysql.connect(
    host="xxc.ru",
    user=settings.MYSQL_USER,
    password=settings.MYSQL_PASSWORD,
    # ...
)

Так как local_settings.py является полноценным Python-файлом, там можно выполнять какой-нибудь произвольный код, что увеличивает гибкость в сравнении с текстовыми файлами, но в то же время открывает новые способы для выстрела в ногу, так что аккуратно.

Файл должен быть расположен так, чтобы Python его смог найти и импортировать. Он не во всех окружениях может импортировать файлы из текущего каталога, и, если простой импорт как в примере выше у вас не сработает, возможно понадобится прописать переменную окружения PYTHONPATH=. или добавить текущий каталог в список sys.path.

Кстати, все связанные с файлами способы можно комбинировать с переменными окружения. Суть такова: в переменной окружения прописываем, что читать, а Python-код потом читает указанный там файл (или импортирует указанный модуль):

SETTINGS_MODULE=my_mysql_settings

import os, importlib
# Это значение по умолчанию на случай, если переменной окружения не будет
os.environ.setdefault('SETTINGS_MODULE', 'local_settings')

# Импортируем модуль, указанный в переменной окружения
settings = importlib.import_module(os.getenv('SETTINGS_MODULE'))

# Остальное как обычно
conn = pymysql.connect(
    host="xxc.ru",
    user=settings.MYSQL_USER,
    password=settings.MYSQL_PASSWORD,
    # ...
)

Таким образом можно завести несколько файлов конфигурации и переключаться между ними с помощью переменной окружения. Подобный подход (в виде более сложном, чем я показал, но похоже) применяется, например, в популярном веб-фреймворке Django; там такая переменная окружения называется DJANGO_SETTINGS_MODULE.

Вообще не хранить ничего и запрашивать в консоли каждый раз

Вбивать пароль от базы данных каждый раз не очень удобно, но всё же тоже вариант. При этом с использованием getpass вводимый текст в консоли не отображается (даже звёздочек нету), так что никто не узнает, какой пароль вы там вводите.

import getpass, pymysql

mysql_user = getpass.getpass('MySQL user> ')
mysql_password = getpass.getpass('MySQL password> ')

conn = pymysql.connect(
    host="xxc.ru",
    user=mysql_user,
    password=mysql_password,
    # ...
)

Самые распространенные пароли пользователей Мэйл.ру

Самые распространенные пароли

Как вы уже знаете, недавно была опубликована украденная злоумышленниками база пользователей майл.ру. Мне захотелось проанализировать эту базу логинов и паролей.

Я решил написать эту статью и поделиться с вами результатами анализа, чтобы показать необремененному вопросами компьютерной безопасности пользователю на сколько важно создавать сложные пароли.

Кстати, когда-то у нас выкладывалась статья где мы приводили статистику использование паролей пользователей iPhone.  Самые распространенные пароли iPhone

Анализ базы логинов и паролей Мэйл.ру

  • Количество всех записей: 4 664 478
  • Число повторов паролей (т.е. встречается в списке более 1 раза): 2 382 116 , т.е. 51.07%

ТОП-100 паролей