Your password is a form of authentication, or identification, used to control access to a given resource. Passwords are supposed to be kept secret, thereby controlling access to important information. But due to continuing advances in technology, passwords are becoming weaker every day. The threat has grown to the point where using a password as the sole form of authentication provides you with almost no protection at all. Cracking a password has become a task that can be accomplished in minutes instead of weeks or months. Additional measures need to become commonplace now to protect even ordinary digital assets.
Why Your Password is at Risk
Your password is used to identify you and provide access to your computer resources. It is a form of authentication that is necessary to determine what rights you have within a system. Digital authentication is generally broken down into three classifications:
- Something you know: your password, a pass phrase, or your PIN number.
- Something you have: a security token or a smart card.
- Something you are: biometrics (such as a fingerprint or a retinal scan).
When used as the sole form of authentication, passwords are generally considered the weakest form of authentication. Why? Let's face it; most folks tend to get lazy with their passwords:
- They devise simple passwords, such as the names of their pets or the names of their favorite sports teams.
- They use the same password for multiple systems.
- They write their passwords on sticky notes and stick them next to their computers.
Once your password is no longer secret, it no longer uniquely identifies you – which means it no longer protects access to your valuable information. Unfortunately, even if you do protect your password, there are other ways of obtaining it.
Sniffing Around in Your Data
Bad guys can sniff passwords as they are transmitted over the network by using specialized hardware or software that allows them to access network traffic as it's transmitted over the wire.
Sniffing can provide direct access to passwords if they are transmitted in the clear (without some form of encryption). Even today there are many technologies, applications, and protocols that transmit this sensitive information in clear text without any form of protection. Some examples are:
- Websites (HTTP)
- Email (POP)
- Telnet and FTP
By sending this authentication in clear text, it is immediately available for exploitation without any further level of effort.
Encryption: Speaking in Tongues
One method of protecting passwords is to apply cryptography to encode the password so it cannot be observed in a readable form. There are many different methods of encrypting passwords, each with varying levels of protection and security. Some more commonly used examples are:
- Windows LAN Manager and NT LAN Manager hash (LM and NTLM): NTLM is a Microsoft authentication protocol that uses a challenge-response sequence requiring the transmission of three messages between the client and the server.
- NTLM v2: An updated version of NTLM that addresses weaknesses in the original implementation.
- Kerberos: Kerberos is a network authentication protocol that allows individuals communicating over an insecure network to prove their identity to one another in a secure manner.
Each method works by simply applying a one-way cryptographic algorithm to the password, which creates an encrypted hash. In simpler terms, the algorithm is a form of very complex math that is used to create an encoded version of your password (a password hash). There is generally thought to be no way to mathematically reverse the math to get the original password from the encrypted hash, thus it is considered a one-way process. This encrypted hash can still be sniffed from the network, but it cannot be used in the encrypted form.
Passwords are usually stored in a local system database. This is necessary to allow the system a method of verifying passwords when a user is trying to gain access. These passwords are usually stored in an encrypted form based on the cryptographic hash previously discussed. Unfortunately, this database represents the proverbial pot of gold for anyone wishing to gain access to your information systems.
Various computer operating systems store their passwords in some well-known standard locations. Many Unix systems store their passwords in the location \etc\passwd, whereas Windows stores them in a local security accounts manager (SAM) database. If attackers gain access to these files, they can easily launch attacks against this cache of information in their efforts to obtain (or crack) the passwords.
Attacking with Dictionaries and Brute-Force
Password attacks have taken many forms, the first of which was probably as simple as trying to guess passwords. The simplest form of guessing passwords was accomplished by manually attempting to log into a computer system and taking your best guesses at the password. Many people choose simple passwords that are easy for them to remember – but that makes them easy for others to figure out as well.
People may also forget or neglect to change default system or account password. A quick Google search for default passwords provides extensive listings of default passwords for various systems. Manual password guessing is very slow and tedious, and is further complicated by the fact that many computer systems lock out an account after a number of failed login attempts. The bad guys have reacted to this challenge by automating their password-cracking attacks.
But how is guessing automated? There are two common methods of automated guessing:
A dictionary attack uses a dictionary of common words and names as the source for guessing passwords. Again, many people choose simple passwords that are easy to remember. This means they will choose common words, names, places, and so on. Dictionaries have been created using these common words and they are available for download and immediate use.
A brute-force attack is a little more complex and can take much longer to execute. In simple terms, a brute-force attack attempts all possible character combinations until if finds a match. This total number of combinations is referred to as the keyspace. To know how many possibilities need to be calculated, we need to take the number of allowable characters (y) raised to the power of the password length (x) in the form of yx. As an example, let’s look at using just uppercase alphabetic characters to create an eight-character password. The following example shows 26 characters raised to the power of 8:
Now, what happens if we expand this to all possible characters on the standard keyboard? That’s 96 characters:
As the possible character set is increased, the potential number of combinations increases exponentially. This means the computational time to crack these passwords increases in proportion. NIST Special Publication 800-63 provides excellent discussion on password strength and how it is affected by the password attributes (password length and possible character sets).
So, realistically, how long might it take to crack some of these passwords using a brute-force attack? Instead of recreating all the math and scenarios here, I’ll refer you to an article (How Long Does It Take to Crack Passwords?) that provides a detailed explanation of the time breakdown. According to this article, it would take up to 2.1 centuries to evaluate the entire keyspace associated with an eight-character password (based on the entire character set on a standard keyboard). Taking a couple of centuries to crack a password is of no value to anyone. This was an obvious weakness to the brute-force attack, so the bad guys developed new techniques, including distributed computing and Cryptanalytic Time-Memory Trade-Off.
Using Distributed Computing to Become Faster
One of the first attempts at developing faster attack methods was the use the distributed computing model. There are many well-known examples of this technique, such as SETI@Home and Folding@Home. These projects make use of a screen saver that uses dormant computer cycles to perform complex calculations. This concept was also used in the creation of a distributed password cracker known as distributed john or djohn. An excerpt from that site explains the process:
"With Distributed John (djohn) you can crack passwords using several machines to get passwords sooner than using a single machine. The cracking in itself is done by John the Ripper and djohn's server (djohnd) divides the work in work packets and coordinates the effort among the clients (djohn), which are the ones who do the work."
This approach gave hackers almost unlimited cracking power. They were limited by only the number of computers that could be assigned to the task.
Using Cryptanalytic Time-Memory Trade-off to Become More Efficient
Eventually the idea arose that these lengthy calculations need not be done repetitively. In other words, why do the same task over and over? Why not do it one time and save the results for re-use? This concept eventually led to the concept of Cryptanalytic Time-Memory Trade-Off. I don’t have the space here to discuss the concept in any depth, but it needs to be mentioned because it later led to the implementation of Rainbow Tables for password cracking. Rainbow tables use generated password hashes stored in a lookup table. Thus, they need to be created only one time and then stored for future use. But again, there are difficulties with this approach:
- There is still a huge time requirement for creating the tables. This has again been addressed with the application of distributed processing for Rainbow Tables.
- The storage requirements for this sort of project are immense (on the order of hundreds of gigabytes). Until recently, this would have been very cost prohibitive. Now, however, it’s possible to buy half-terabyte drives for slightly over $100.