whh@pbhya.PacBell.COM (Wilson Heydt) (11/19/88)
I've been reading the discussions of how to tighten security in the light of recent events. In particular, the remarks about weaknesses in the existing password encryption algorithms. I am puzzled about an omission in the solutions suggested. As I recall from the supplementary Unix manuals--specifically the two articles on passowrd security--it is noted that the standard Unix schemeuses the passowrd as the encryption key on a standard plaintext. Would it not be a great help in stopping brute-force attacks to make the plain-text configurable by binary-licnese sites? Then the attacker would have to either break to the plain text for each site--difficult enough in itself, restrict itself to some subset of the possible plaintexts, or generate an implausibly large dictionary. Am I off base? Merely out of date? Or has this been (or is this being) done? --Hal ========================================================================= Hal Heydt | "Hafnium plus Holmium is Analyst, Pacific*Bell | one-point-five, I think." 415-645-7708 | --Dr. Jane Robinson {att,bellcore,sun,ames,pyramid}!pacbell!pbhya!whh
jgreely@banjo.cis.ohio-state.edu (J Greely) (11/20/88)
In article <21670@pbhya.PacBell.COM> whh@pbhya.PacBell.COM (Wilson Heydt) writes: >it is noted that the standard >Unix schemeuses the passowrd as the encryption key on a standard >plaintext. More specifically, the plaintext is 0x0000000000000000, encrypted 25 times with a variant of DES. > Would it not be a great help in stopping brute-force >attacks to make the plain-text configurable by binary-licnese sites? Depends on the attack (see below). All a different plaintext accomplishes is forcing the cracker to recompile his cracker with a new plaintext (and pre-running the initial permutation, for speed). >Then the attacker would have to either break to the plain text for >each site--difficult enough in itself, restrict itself to some >subset of the possible plaintexts, or generate an implausibly large >dictionary. point by point: 1. break the plaintext: trivial to do, if I can read libc.a on your system. Since crypt is a standard library function, the object file is open to anyone who wants it. Your secret plaintext is secret only so long as no one is allowed to use the crypt function. Of course, you can remove crypt.o from libc.a, and hide it somewhere for rebuilding system utilities (which you'll at least need unlinked objects for). Messy, but it does add some security. You *will* be surprised at how many programs use it, though. Oh, and don't forget to shut off world read permissions for any program you link it into. 2. possible plaintexts: 2^64, non-trivial (no kidding). 3. large dictionary: pre-encrypting /usr/dict/words with all of the possible salts uses up just about a gig of disk, (11 bytes per encryption, 4096 salts, 25000 words). Generating this is non- trivial: 102,400,000 encryptions; figure about 5 crypts/second on a Sun 3/50, or 237 days to generate this with one Sun (assuming sufficient disk space). Of course, we have over 200 suns here, reducing that to a very reasonable time. Once I know your plaintext, I have plenty of time to generate passwords. How often do you plan on changing it, remembering that all of your users have to change their passwords every time you change the plaintext? I'll just fill a box of tapes, write your site's name on them, and save them "for later" (half :-)). Did I mention that we've managed a 45% speed improvement in the crypt function (and we're not done speeding it up yet)? >Am I off base? Merely out of date? Or has this been (or is this >being) done? It *is* a good idea, just not easy in practice (particularly for binary sites). -=- J Greely (jgreely@cis.ohio-state.edu; osu-cis!jgreely) "By focusing my awareness upon the void that is beyond 'self', I was able to transcend each humilitation ..." <WHAM!> "...except the one with the saran wrap and the yogurt."
ok@quintus.uucp (Richard A. O'Keefe) (11/20/88)
In article <27987@tut.cis.ohio-state.edu> jgreely@banjo.cis.ohio-state.edu (J Greely) writes: >1. break the plaintext: trivial to do, if I can read libc.a on your > system. Since crypt is a standard library function, the object > file is open to anyone who wants it. Your secret plaintext is > secret only so long as no one is allowed to use the crypt function. > Not so trivial if the revised crypt() is an RPC call to a "crypt server"; then you would need read access to the crypt server code as well. [This would be one occasion when the added cost of an RPC call would be welcome!] A site-configurable plaintext for crypt() sounds nice, but remember what Feynman found out about safes!
jfh@rpp386.Dallas.TX.US (John F. Haugh II) (11/21/88)
In article <27987@tut.cis.ohio-state.edu> jgreely@banjo.cis.ohio-state.edu (J Greely) writes: >point by point: >1. break the plaintext: trivial to do, if I can read libc.a on your > system. Since crypt is a standard library function, the object > file is open to anyone who wants it. Your secret plaintext is > secret only so long as no one is allowed to use the crypt function. No, you can call setkey() from inside of login(1). Then the cracker has to be able to read login(1). If you allow the bad guy to read login, you lose. If you are running shadow password files and you let the bad guy read that, then you lose as well. But in the normal case you would have to be root to read the files, or have physical access to the dump tapes or system console [ to break in at single user ]. Greely is on the right track - you can't just add one feature [ new plaintext ] and expect that to solve all your problems. -- John F. Haugh II +----------Quote of the Week:---------- VoiceNet: (214) 250-3311 Data: -6272 | "Okay, so maybe Berkeley is in north- InterNet: jfh@rpp386.Dallas.TX.US | ern California." -- Henry Spencer UucpNet : <backbone>!killer!rpp386!jfh +--------------------------------------
jgreely@wizard.cis.ohio-state.edu (J Greely) (11/21/88)
In article <8724@rpp386.Dallas.TX.US> jfh@rpp386.Dallas.TX.US writes: >In article <27987@tut.cis.ohio-state.edu> I write: >>1. break the plaintext: trivial to do, if I can read libc.a on your >> system. >No, you can call setkey() from inside of login(1). Then the cracker >has to be able to read login(1). Uh, no. Maybe we're looking at different crypt sources (mine's 4.3 BSD), but setkey has nothing to do with the plaintext, which is initialized to zeros in crypt right *after* the call to setkey. The code basically does this: convert input password to block setkey(block) screw with E-table set block to plaintext (zeros) encrypt(block) repeatedly make it printable and spit it out Calling setkey from login accomplishes nothing. Now, if you added a function set_plaintext(), and called *that* from login, you'd have a chance. But you still can't just change login. You have to change everything else that needs to test passwords, *and* make sure they're all unreadable. (wouldn't you feel silly if you forgot to relink su?) -- J Greely (jgreely@cis.ohio-state.edu; osu-cis!jgreely) Unseen, in the background, Fate was quietly slipping the lead into the boxing glove.
dlm@cuuxb.ATT.COM (Dennis L. Mumaugh) (11/22/88)
In article <716@quintus.UUCP> ok@quintus.UUCP (Richard A. O'Keefe) writes: >Not so trivial if the revised crypt() is an RPC call to a "crypt server"; >then you would need read access to the crypt server code as well. [This >would be one occasion when the added cost of an RPC call would be welcome!] > After battling a recalcitrant NFS system for this last four days, this hits home! You assume that 1). The network is working 2). The RPC and the TCP/UDP underneath are working 3). The RPC server is running and sane 4). The RPC data base is sane. All of the above would be required for one to login. Any one thing wrong and you couln't login. Remember most work stations and general customer machines boot into multi-user automatically and not everybody has diskless workstations. One could not login even as root to fix things. Hmmmmm. Do you plan for a trap door in the code if RPC fails? How about if it is just extremely slow. How do you know the difference [cf. Turing Halting ]? -- =Dennis L. Mumaugh Lisle, IL ...!{att,lll-crg}!cuuxb!dlm OR cuuxb!dlm@arpa.att.com
ok@quintus.uucp (Richard A. O'Keefe) (11/24/88)
In article <2220@cuuxb.ATT.COM> dlm@cuuxb.UUCP (Dennis L. Mumaugh) writes: >After battling a recalcitrant NFS system for this last four days, this >hits home! You assume that > 1). The network is working > 2). The RPC and the TCP/UDP underneath are working > 3). The RPC server is running and sane > 4). The RPC data base is sane. >All of the above would be required for one to login. If they're not working, there isn't a lot of point in _trying_ to log in anyway. If the network isn't working, a disc-less node can't even boot. If RPC isn't working, NFS isn't working, and I can't get at my files. (Even if you particular machine has a disc, if you're on a network you almost certainly want to get at some files which are elsewhere. Think about an Apollo network with NLS.) There is no reason why a password server could not be replicated.
boyd@necisa.necisa.oz (Boyd Roberts) (11/28/88)
In article <741@quintus.UUCP> ok@quintus.UUCP (Richard A. O'Keefe) writes: > >There is no reason why a password server could not be replicated. So, we'll just re-invent YP, again!?! No point doing something badly, when you can get some other mindless jerk to do it _really_ badly. On another issue, aren't the ``automated password'' camp completely off the beam? With that style of password choice there's no point in cracking the _password_. Attack would be focused on the password _generator_ function. Unless, of course, the generator algorithm is at least equally difficult to crack. Enough of this password discussion. Boyd Roberts NEC Information Systems Australia boyd@necisa.necisa.oz ``When the going gets wierd, the weird turn pro...''
ok@quintus.uucp (Richard A. O'Keefe) (11/29/88)
In article <522@necisa.necisa.oz> boyd@necisa.necisa.oz (Boyd Roberts) writes: >In article <741@quintus.UUCP> ok@quintus.UUCP (Richard A. O'Keefe) writes: >>[In reply to a claim that a password server would be vulernable to >> having *one* machine go down.] >>There is no reason why a password server could not be replicated. > >So, we'll just re-invent YP, again!?! No point doing something badly, when >you can get some other mindless jerk to do it _really_ badly. As near as I can figure out, Boyd Roberts appears to be claiming that every new replicated server is "some mindless jerk ... re-invent[ing] YP, again ... _really_ badly". Strange. I thought replicated servers (e.g. name-servers, time-servers) were around before YP was even dreamed of. There was a lot of stuff from Xerox on "registries". Calling a (distributed implementation of) a function remotely isn't *quite* the same as using YP, but let it pass.
bzs@encore.com (Barry Shein) (11/30/88)
>On another issue, aren't the ``automated password'' camp completely off >the beam? With that style of password choice there's no point in >cracking the _password_. Attack would be focused on the password >_generator_ function. Unless, of course, the generator algorithm is >at least equally difficult to crack. > >Boyd Roberts NEC Information Systems Australia I tend to agree with you, now we'll spend the next year or two finding out how non-random the supposedly random password generators are (or perhaps 15 minutes once some evil person exploits the fact...) I believe a change to the passwd program demanding 8 character passwords (perhaps 7 chars, that's an easy thing to calculate) with some reasonable rules to avoid dictionary words etc (like must have at least one punctuation and/or mixed case and/or digits) would be sufficient and people can get back to more important things. In fact easy to remember passwords like: Hey%Jude RunUnix! Lemme+In are quite hard to crack unless you have some reason to guess that sort of thing. People are pretty good generators if someone explains to them what the game is. -Barry Shein, ||Encore||
brian@apollo.COM (Brian Holt) (12/06/88)
In article <2220@cuuxb.ATT.COM> dlm@cuuxb.UUCP (Dennis L. Mumaugh) writes: >In article <716@quintus.UUCP> ok@quintus.UUCP (Richard A. O'Keefe) writes: >>Not so trivial if the revised crypt() is an RPC call to a "crypt server"; >>then you would need read access to the crypt server code as well. [This >>would be one occasion when the added cost of an RPC call would be welcome!] >> >After battling a recalcitrant NFS system for this last four days, this >hits home! You assume that > 1). The network is working > 2). The RPC and the TCP/UDP underneath are working > 3). The RPC server is running and sane > 4). The RPC data base is sane. >All of the above would be required for one to login. Any one >thing wrong and you couln't login. Remember most work stations >and general customer machines boot into multi-user automatically >and not everybody has diskless workstations. One could not login >even as root to fix things. > Another approach to this was detailed in a paper given at the Jan. 1988 Usenix Conference ("A User Account Registration System for a Large (Heterogeneous) UNIX Network"; Pato, Martin and Davis). This details Apollo's new heterogenous distributed registry. It is based on NCS, and runs on Apollo's, Sun's, Vaxen, etc. The idea is to have a distributed, replicated database that is accessed via RPC mechanisms. In addition, a local cache keeps track of verification information for the most recently (most frequently? Not sure) accessed accounts. I don't work on this, I just use it, and it all seems to work well, certainly better than the hassle's I've heard of with other approaches. Please read the paper (it's in the conference proceedings, p. 155) before asking further questions. =brian Here's the abstract (reprinted without permission): Three problem areas arise when considering a user registration system for a large heterogenous distributed computing environment. Large environments demand controls on the complexity of administration. heterogeneitty requires an examination of the notion of identity in the network as well as the interoperability of software on different hosts. Distribution raises the problems of availability, reliabilty and security. Generally available UNIX environments (4.3 BSD and AT&T System V.3) provide few tools for solving these problems. Account administration is typically handled through manual editing of a single /etc/passwd file. Consistency is maintained on multiple machines by periodically copying the /etc/passwd file to each machine in the network. For large networks, with thousands of users and machines, these mechanisms are clumsy and error prone, and they vest too much power in a single system administrator. RGY is a replicated user registration system built on Apollo's portable Network Computing System (NCS). The system consists of a set of daemons which maintain a replicated user registration database. Remote access to the user registration database is provided at each client site through remote procedure calls ina portable subroutine library that replaces the getpwent(3) and getgrent(3) C library calls. Weakly consistent replicatino provides a high degree of availability and reliability. Propagation of individual updates is performaed yielding an inexpensive mechanism for maintaining consistency. Updates are secureely performed using authenticated interfaces, allowing any client site to update the database. -- Internet: brian@apollo.COM UUCP: {decvax,mit-erl,yale}!apollo!brian NETel: Apollo: 508-256-6600 x5694 Home: 617-332-3073 USPS: Apollo Computer, Chelmsford MA Home: 29 Trowbridge St. Newton MA (Copyright 1988 by author. All rights reserved. Free redistribution allowed.)