Фишинг - Практика
@LeakinfoФишинг (англ. phishing от fishing «рыбная ловля, выуживание») — вид интернет-мошенничества, целью которого является получение доступа к конфиденциальным данным пользователей — логинам и паролям.
Данная лабораторная предоставлена исключительно в обучающих целях! Не повторяйте эти действия без письменного согласия заказчика! Составитель лабораторной работы и преподаватели не несут никакой ответственности за деяния студентов!
В этой лабораторной работе мы будем использовать инструмент Gophish для проведения фишинговой рассылки. Для этого мы поднимем свой почтовый сервер и будем экспериментировать на нём. Напоминаю, что проведение подобной атаки без письменного разрешения является преступлением, поэтому мы сами создадим себе пользователей и наши фишиговые письма распространятся только внутри нашей локальной сети.
Чем опасен фишинг? Люди по-прежнему остаются самым уязвимым местом информационной системы, в связи с этим одним из самых простых способов атаки и дальнейшего распространения является атака на сотрудников. Далеко не все сотрудники организаций способны противостоять своим эмоциям и не податься на провокацию злоумышленника.
Для повышения уровня информационной грамотности следует проводить тренировочные рассылки вредоносных писем, чтобы сотрудники научились распознавать подобные атаки и не повелись на удочку реального злоумышленника.
Подобные проверки стоит проводить раз в две недели или один месяц, чтобы держать коллектив в тонусе
Цена данной услуги варьируется от количества хостов и проработанности аттаки, но удовольствие не из дешёвых :)
Используемые инструменты
- SMTP-сервер (Почтовый сервер)
- Gophish
Инструкция по установке
Загрузка
git clone https://github.com/Ivanhahanov/InformationSecurityMethodsAndTools.git
После успешного клонирования репозитория на компьютере будет создана директория InformationSecurityMethodsAndTools
cd InformationSecurityMethodsAndTools
И перейти в директорию Phishing
cd Phishing
Развертывание
На данном этапе необязательно выполнять эти команды, так как предстоит создать TLS сертификаты и пользователей почтового сервера, но вы можете выполнить их, чтобы проверить что у вас работает Docker
и docker-compose
docker-compose up -d
Флаг -d
запустит в режиме демона, и вы не будете видеть логи. Сейчас с ресурса DockerHub “спулятся” образы почтового сервера и приложения для фишинга.
DockerHub - это аналог Github для образов docker образов, вы можете туда загружать свои образы, а можете загружать чужие. Все образы имеют рейтинг, вы можете узнать сколько раз образ загружали и сколько ему поставили звёздочек. Это полезная информация, так вы можете понять, насколько тот или иной образ популярен, и решить, стоит ли загружать именно его или поискать другую реализацию.
Чтобы посмотреть, что происходит внутри:
docker-compose logs -f
Почтовый сервер должен сообщить об ошибках, так как у нас нет пользователей и нет подписанного сертификата. Так что можно выполнить эту команду:
docker-compose down
И Mail сервер плавно завершит работу
Конфигурация
Создание сертификатов
Нам необходимо создать самоподписанный TLS сертификат. Такие сертификаты используются для шифрования данных, самый распространённый пример - HTTPS.
В нашем случае он нужен для зашифровки писем, чтобы никто не мог их прочитать при перехвате трафика
В контейнере docker-mailserver есть утилита для генерации сертификатов.
Запустим контейнер в интерактивном режиме (флаг -it).
Примонтируем раздел, чтобы сертификат создался у нас в директории MailServer/config/ssl локально.
docker run -ti --rm -v "$(pwd)"/config/ssl:/tmp/docker-mailserver/ssl -h mail.domain.com -t tvial/docker-mailserver generate-ssl-certificate
Создание сертификата происходит в два этапа
- создание CA сертификата
- создание конечного сертификата
Вводимые поля должны быть идентичны, кроме одного поля Common Name (e.g. server FQDN or YOUR name)
. Здесь в первым случае надо указать domain.com, во втором mail.domain.com
Поля extra
оставить пустыми
Пример генерации сертификата:
CA certificate filename (or enter to create) Making CA certificate ... ==== openssl req -new -keyout ./demoCA/private/cakey.pem -out ./demoCA/careq.pem Generating a RSA private key ...........................+++++ .................................................................................................................................+++++ writing new private key to './demoCA/private/cakey.pem' Enter PEM pass phrase: Verifying - Enter PEM pass phrase: ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:RU State or Province Name (full name) [Some-State]:Moscow Locality Name (eg, city) []:Moscow Organization Name (eg, company) [Internet Widgits Pty Ltd]:My-company Organizational Unit Name (eg, section) []:Red Team Common Name (e.g. server FQDN or YOUR name) []:domain.com Email Address []:admin@domain.com Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: ==> 0 ==== ==== openssl ca -create_serial -out ./demoCA/cacert.pem -days 1095 -batch -keyfile ./demoCA/private/cakey.pem -selfsign -extensions v3_ca -infiles ./demoCA/careq.pem Using configuration from /usr/lib/ssl/openssl.cnf Enter pass phrase for ./demoCA/private/cakey.pem: Check that the request matches the signature Signature ok Certificate Details: Serial Number: 5d:ac:b5:3f:cc:b6:26:bf:6a:20:dd:c1:ff:08:a0:be:14:1b:e4:3c Validity Not Before: Feb 8 13:40:27 2021 GMT Not After : Feb 8 13:40:27 2024 GMT Subject: countryName = RU stateOrProvinceName = Moscow organizationName = My-company organizationalUnitName = Red Team commonName = domain.com emailAddress = admin@domain.com X509v3 extensions: X509v3 Subject Key Identifier: E9:4F:D1:CC:9D:09:14:A3:9C:23:68:8E:0E:76:9E:35:AE:22:56:61 X509v3 Authority Key Identifier: keyid:E9:4F:D1:CC:9D:09:14:A3:9C:23:68:8E:0E:76:9E:35:AE:22:56:61 X509v3 Basic Constraints: critical CA:TRUE Certificate is to be certified until Feb 8 13:40:27 2024 GMT (1095 days) Write out database with 1 new entries Data Base Updated ==> 0 ==== CA certificate is in ./demoCA/cacert.pem Ignoring -days; not generating a certificate Generating a RSA private key ..................................................+++++ ..............................................................+++++ writing new private key to '/tmp/docker-mailserver/ssl/mail.domain.com-key.pem' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:RU State or Province Name (full name) [Some-State]:Moscow Locality Name (eg, city) []:Moscow Organization Name (eg, company) [Internet Widgits Pty Ltd]:My-company Organizational Unit Name (eg, section) []:Red Team Common Name (e.g. server FQDN or YOUR name) []:mail.domain.com Email Address []:admin@domain.com Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: Using configuration from /usr/lib/ssl/openssl.cnf Enter pass phrase for ./demoCA/private/cakey.pem: Check that the request matches the signature Signature ok Certificate Details: Serial Number: 5d:ac:b5:3f:cc:b6:26:bf:6a:20:dd:c1:ff:08:a0:be:14:1b:e4:3d Validity Not Before: Feb 8 13:41:55 2021 GMT Not After : Feb 8 13:41:55 2022 GMT Subject: countryName = RU stateOrProvinceName = Moscow organizationName = My-company organizationalUnitName = Red Team commonName = mail.domain.com emailAddress = admin@domain.com X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: 2F:6B:63:BE:40:11:03:4E:EC:E7:27:9E:E7:F8:3B:A8:82:9C:84:D9 X509v3 Authority Key Identifier: keyid:E9:4F:D1:CC:9D:09:14:A3:9C:23:68:8E:0E:76:9E:35:AE:22:56:61 Certificate is to be certified until Feb 8 13:41:55 2022 GMT (365 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries
После добавления сертификата надо пересобрать наш mail server, чтобы наш сертификат применился
docker-compose up --build
Флаг --build
соберёт контейнеры заново, если появились какие-то изменения в файловой структуре или конфигурациях
Создание пользователей
Для того чтобы отправлять письма по электронной почте, нам нужны пользователи.
Для создания пользователей у нас есть Bash скрипт setup.sh
# сделать скрипт исполняемым chmod +x setup.sh # создание email аккаунтов user/password ./setup.sh -i tvial/docker-mailserver:latest email add admin@domain.com admin123 ./setup.sh -i tvial/docker-mailserver:latest email add user@domain.com user123 # список email аккаунтов ./setup.sh -i tvial/docker-mailserver:latest email list
В результате мы должны увидеть две почты admin@domain.com и user@domain.com
Проверка отправки сообщений
Для проверки работы Почтового сервера рекомендуется использовать утилиту swaks
# Установка утилиты sudo apt-get install swaks # Отправка email для user@domain.com swaks --from admin@domain.com --to user@domain.com --server 127.0.0.1:587 -tlso -au admin@domain.com -ap admin123 --header "Subject: test from admin" --body "testing 123" # Отправка email для admin@domain.com swaks --from user@domain.com --to admin@domain.com --server 127.0.0.1:587 -tlso -au user@domain.com -ap user123 --header "Subject: test from user" --body "testing 456"
Описание флагов:
--from
- email отправителя--to
- email получателя--server
адрес SMTP сервера--au
почта пользователя для авторизация--ap
пароль пользователя для авторизация--header
заголовок письма--body
тело письма
В результате мы увидим полный список действий, которые произошли при отправке письма
=== Trying 127.0.0.1:587... === Connected to 127.0.0.1. <- 220 mail.domain.com ESMTP -> EHLO ubuntu <- 250-mail.domain.com <- 250-PIPELINING <- 250-SIZE 10240000 <- 250-ETRN <- 250-STARTTLS <- 250-ENHANCEDSTATUSCODES <- 250-8BITMIME <- 250-DSN <- 250 CHUNKING -> STARTTLS <- 220 2.0.0 Ready to start TLS === TLS started with cipher TLSv1.3:TLS_AES_256_GCM_SHA384:256 === TLS no local certificate set === TLS peer DN="/C=AU/ST=Some-State/O=Internet Widgits Pty Ltd/CN=mail.domain.com" ~> EHLO ubuntu <~ 250-mail.domain.com <~ 250-PIPELINING <~ 250-SIZE 10240000 <~ 250-ETRN <~ 250-AUTH PLAIN LOGIN <~ 250-AUTH=PLAIN LOGIN <~ 250-ENHANCEDSTATUSCODES <~ 250-8BITMIME <~ 250-DSN <~ 250 CHUNKING ~> AUTH LOGIN <~ 334 VXNlcm5hbWU6 ~> YWRtaW5AZG9tYWluLmNvbQ== <~ 334 UGFzc3dvcmQ6 ~> YWRtaW4xMjM= <~ 235 2.7.0 Authentication successful ~> MAIL FROM:<admin@domain.com> <~ 250 2.1.0 Ok ~> RCPT TO:<user@domain.com> <~ 250 2.1.5 Ok ~> DATA <~ 354 End data with <CR><LF>.<CR><LF> ~> Date: Mon, 08 Feb 2021 17:00:22 +0300 ~> To: user@domain.com ~> From: admin@domain.com ~> Subject: test from admin ~> Message-Id: <20210208170022.076657@ubuntu> ~> X-Mailer: swaks v20190914.0 jetmore.org/john/code/swaks/ ~> ~> testing 123 ~> ~> ~> . <~ 250 2.0.0 Ok: queued as 657C948415C ~> QUIT <~ 221 2.0.0 Bye === Connection closed with remote host.
Настройка почтового клиета
В качестве почтового клиента возьмём предустановленный ThunderBird
Инструкция по выполнению
- Открыть в браузере веб приложение Gophish по адресу https://localhost:3333
- Авторизироваться в системе. Пароль находится в логах, а логин - admin
- Создать новый пароль
- Теперь приступим к настройке …
- Настроить профиль отправителя(Sending Profile)
IP хоста взять из докера с помощью команды docker exec mail ip a
проверить работоспособность можно с помощью кнопки Send Test Email
- Настройка фальшивой страницы(Landing Page)
Нажать на кнопку “Import Site” и ввести туда адрес на ваше усмотрение, я выбрал HackTheBox
- Настройка шаблона письма(Email Template)
- Настройка получателей(User & Groups)
- Настройка рассылки компании(Compaigns)
- Результат вы можете увидеть у себя во вкладке Dashboard. При переходе по ссылке в письме, это будет фиксироваться в круговой диаграмме и на графике, если за основу взять шаблон с логином и паролем, то система автоматически быдет фиксировать ввод пароля
Отчёт
Варианты сдачи, на усмотрение преподавателя
- Сформировать отчёт в формате .pdf приложить туда скрины поддельных страниц и писем которые пришли созданным вами пользователями. В отчёте предоставить информацию о проведенном тестировании, сколько человек перешло по ссылкам, какой процент сотрудников вашей вымышленной компании подверглись атаке и описать советы по предотвращении подобных атак. Проявите фантазию, чтобы преподавателю тоже было интересно читать отчёты.
- Предоставить всё вышеперечисленное преподавателю и ответить на каверзные вопросы :-)
Варианты сдачи, на усмотрение преподавателя
- Сформировать отчёт в формате .pdf приложить туда скрины поддельных страниц и писем которые пришли созданным вами пользователями. В отчёте предоставить информацию о проведенном тестировании, сколько человек перешло по ссылкам, какой процент сотрудников вашей вымышленной компании подверглись атаке и описать советы по предотвращении подобных атак. Проявите фантазию, чтобы преподавателю тоже было интересно читать отчёты.
- Предоставить всё вышеперечисленное преподавателю и ответить на каверзные вопросы :-)
- 🦋 Слитая информация - @Leakinfo
- 🎭 Наша группа > - Точка входа
- ❤️ Поблагодарить Bitcoin