home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / misc / volume28 / crack / part05 < prev    next >
Internet Message Format  |  1992-03-19  |  34KB

  1. From: aem@aber.ac.uk (Alec David Muffett)
  2. Newsgroups: comp.sources.misc
  3. Subject: v28i114: crack - The Unix Password Cracker, version 4.1, Part05/05
  4. Message-ID: <1992Mar18.143933.24081@aber.ac.uk>
  5. Date: 18 Mar 92 14:39:33 GMT
  6. Approved: aem@aber.ac.uk
  7. X-Md4-Signature: 40197e049e95f9f15ad937ab62008026
  8.  
  9. Submitted-by: aem@aber.ac.uk (Alec David Muffett)
  10. Posting-number: Volume 28, Issue 114
  11. Archive-name: crack/part05
  12. Environment: UNIX
  13. Supersedes: crack: Volume 25, Issue 5-9
  14.  
  15. #! /bin/sh
  16. # it by saving it into a file and typing "sh file".  To overwrite existing
  17. # files, type "sh file -c".  You can also feed this as standard input via
  18. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  19. # will see the following message at the end:
  20. #        "End of archive 5 (of 5)."
  21. # Contents:  Docs/readme.txt
  22. # Wrapped by aem@aberfa on Wed Mar 18 14:08:39 1992
  23. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  24. if test -f 'Docs/readme.txt' -a "${1}" != "-c" ; then 
  25.   echo shar: Will not clobber existing file \"'Docs/readme.txt'\"
  26. else
  27. echo shar: Extracting \"'Docs/readme.txt'\" \(30990 characters\)
  28. sed "s/^X//" >'Docs/readme.txt' <<'END_OF_FILE'
  29. X
  30. X
  31. X
  32. X
  33. X
  34. X
  35. X
  36. X
  37. X
  38. X                    "Crack Version 4.1"
  39. X            A Sensible Password Checker for Unix
  40. X
  41. X
  42. X                     Alec D.E. Muffett
  43. X
  44. X                   Unix Software Engineer
  45. X                   Aberystwyth, Wales, UK
  46. X      (aem@aber.ac.uk or alec_muffett@hicom.lut.ac.uk)
  47. X
  48. X
  49. X                          ABSTRACT
  50. X
  51. X          Crack is a freely available program  designed
  52. X     to   find   standard   Unix   eight-character  DES
  53. X     encrypted passwords  by  standard  guessing  tech-
  54. X     niques outlined below.  It is written to be flexi-
  55. X     ble, configurable and fast, and to be able to make
  56. X     use  of  several  networked hosts via the Berkeley
  57. X     rsh program (or similar), where possible.
  58. X
  59. X
  60. X
  61. X1.  Statement of Intent
  62. X
  63. XThis package is meant as a proving device to  aid  the  con-
  64. Xstruction  of  secure  computer systems.  Users of Crack are
  65. Xadvised that they may get severly hassled  by  authoritarian
  66. Xtype sysadmin dudes if they run Crack without proper author-
  67. Xisation.
  68. X
  69. X2.  Introduction to Version 4.0
  70. X
  71. XCrack is now into it's fourth version, and has been reworked
  72. Xextensively  to provide extra functionality, and the purpose
  73. Xof this release is to consolidate as much of this new  func-
  74. Xtionality into as small a package as possible.  To this end,
  75. XCrack may appear to be less configurable: it has been  writ-
  76. Xten on the assumption that you run a fairly modern Unix, one
  77. Xwith BSD functionality, and then patched in order to run  on
  78. Xother systems.
  79. X
  80. XThis, surprisingly enough, has led to neater code,  and  has
  81. Xmade  possible the introduction of greater flexibility which
  82. Xsupercedes many of the options that could be  configured  in
  83. Xearlier  versions  of  Crack.  In the same vein, some of the
  84. Xolder options are now mandatory.  These,  such  as  feedback
  85. Xmode  and  CRACK_PRINTOUT are no longer supported as options
  86. Xand probably never will be again.  There is just  a  lot  of
  87. Xwastage  in not running with them, and too many dependencies
  88. Xin other functions to bother programming around them.
  89. X
  90. X
  91. X
  92. X                       March 3, 1992
  93. X
  94. X
  95. X
  96. X
  97. X
  98. X                           - 2 -
  99. X
  100. X
  101. XThe user interface is basically identical  to  the  previous
  102. Xversions,  although  some  people have asked about providing
  103. XX-windows GUI's to Crack, I think it would  be  a  waste  of
  104. Xtime to do so. Crack has far less options than your ordinary
  105. Xversion of /bin/ls.
  106. X
  107. X3.  Introduction to Version 4.1
  108. X
  109. XVersion 4.1 of the Crack program is an attempt to extend the
  110. Xfeatures  introduced  in v4.0 and provide hooks for external
  111. Xlibraries such  as  Michael  Glad's  wonderful  UFC  crypt()
  112. Ximplementation,  which (on some platforms) can outperform my
  113. Xfcrypt() by a factor of 3.  I have also been  burdened  with
  114. Xthe  task of making Crack's memory handling bombproof (hah!)
  115. Xin the vague hope that it will survive running out of memory
  116. Xon small machines.[1]
  117. X
  118. XThe extensions that I mention above regard the  addition  of
  119. Xextra primitives to the dictionary processing language which
  120. Xpermit the production of more concise dictionaries  contain-
  121. Xing  words,  more  of which are likely to be passwords.  The
  122. Xidea is to gain efficiency by removing  some  of  the  dross
  123. Xfrom the generated dictionaries.
  124. X
  125. XCrack should (generally) be more  disk-space  efficient  now
  126. Xthat  the  program  can  spot  dictionaries  which have been
  127. Xcompressed using compress or pack and will  uncompress  them
  128. Xon  the  fly  as  necessary  (using  zcat  or  pcat  respec-
  129. Xtively).[2]
  130. X
  131. X4.  Crack Methodology - Part 1: Internals
  132. X
  133. XCrack takes as its input a  series  of  password  files  and
  134. Xsource  dictionaries.  It merges the dictionaries, turns the
  135. Xpassword files into a sorted list, and  generates  lists  of
  136. Xpossible passwords from the merged dictionary or from infor-
  137. Xmation gleaned about users from the password file.  It  does
  138. X_________________________
  139. X  [1] - or even on large ones. Brian Tompsett  at  Hull
  140. Xtweaked  Crack  v3.3  until  it could run to completion
  141. Xafter filling the swapspace on each  of  a  network  of
  142. XSparcStation2's.  Due  to restructuring work on v4.0, I
  143. Xhave had to  write  my  own  sorting  algorithm  &  re-
  144. Ximplement  all of his tweaks from scratch, and can only
  145. Xhope that I have emulated  the  bombproofness  of  this
  146. Xdesirable (?) functionality.
  147. X  [2] Note to people who are short on memory  or  swap:
  148. Xdo  remember  that to do this Crack will have to fork()
  149. X(via popen()) and might not be able to create  the  un-
  150. Xcompressing  process.  Hence, if you intend to swaplock
  151. Xyour machine, don't compress the  dictionaries.  Switch
  152. Xthis off by editing the Crack shellscript.
  153. X
  154. X
  155. X
  156. X
  157. X                       March 3, 1992
  158. X
  159. X
  160. X
  161. X
  162. X
  163. X                           - 3 -
  164. X
  165. X
  166. Xnot attempt to remedy the problem of allowing users to  have
  167. Xguessable  passwords,  and it should NOT be used in place of
  168. Xgetting a really good, secure passwd program replacement.[3]
  169. X
  170. XThe above paragraphs define the purpose of Crack, and embody
  171. Xa  great  deal of hard work, screams of Eureka!, drunkeness,
  172. Xand a fair amount of swearing too.  There is a lot of think-
  173. Xing, philosophy, and empirical guesswork behind the way that
  174. XCrack attacks password files, and although it  is  not  per-
  175. Xfect,  I  certainly hope that Crack will out-do most of it's
  176. Xcompetitors.
  177. X
  178. XCrack works by making many individual passes over the  pass-
  179. Xword  entries  that  you  supply to it.  Each pass generates
  180. Xpassword guesses based upon a sequence of rules, supplied to
  181. Xthe  program  by  the  user.  The  rules  are specified in a
  182. Xsimplistic   language   in   the   files   gecos.rules   and
  183. Xdicts.rules, to be found in the Scripts directory.  The dis-
  184. Xtinction between these two files will be made clear later.
  185. X
  186. XThe rules are written as a simple string of characters, with
  187. Xone  rule  to a line.  Blank lines, and comment lines begin-
  188. Xning with a hash character #  are  ignored.   Trailing  whi-
  189. Xtespace  is  also ignored.  The instructions in the rule are
  190. Xfollowed from left to right, and are applied to the diction-
  191. Xary  words one by one, as the words are loaded.  Some simple
  192. Xpattern matching primitives are provided for selection  pur-
  193. Xposes,  so  that  if  the dictionary word does not match the
  194. Xpattern, it is ignored.  This  saves  on  time  and  memory.
  195. XBefore  carrying  on,  I  suggest  that  you  browse through
  196. XScripts/dicts.rules, take a look at the  rules  supplied  as
  197. Xdefaults, and try to work out what they do.
  198. X
  199. XThe rules are stored in two different  files  for  two  dif-
  200. Xferent  purposes.   Rules in Scripts/gecos.rules are applied
  201. Xto data generated by Crack from the  pw_gecos  and  pw_gecos
  202. Xentries  of  the user's password entry.  The data fed to the
  203. Xgecos rules for the user aem, who  is  Alec  David  Muffett,
  204. XSystems  would be: aem, Alec, David, Muffett, Systems, and a
  205. Xseries of permutations of those  words,  either  re-ordering
  206. Xthe  words  and  joining them together (eg: AlecMuffett), or
  207. Xmaking up new words based on initial  letters  of  one  word
  208. Xtaken with the rest of another (eg: AMuffett).[4]
  209. X
  210. XThe entire set of rules in gecos.rules is applied to each of
  211. X_________________________
  212. X  [3] See the end of ths document for more  information
  213. Xabout passwd replacements.
  214. X  [4] - and ASystems and DSystems, and MSystems, etc...
  215. Xbecause  Crack  does  not  differentiate.  Hence,  care
  216. Xshould be taken to check for redundancy when adding new
  217. Xrules, so as not to waste time during the gecos pass.
  218. X
  219. X
  220. X
  221. X
  222. X                       March 3, 1992
  223. X
  224. X
  225. X
  226. X
  227. X
  228. X                           - 4 -
  229. X
  230. X
  231. Xthese words, which creates many more permutations and combi-
  232. Xnations,  all  of which are tested.  Hence testing the pass-
  233. Xword gecos information under Crack v4.0  and  upwards  takes
  234. Xsomewhat   longer  than  previously,  but  it  is  far  more
  235. Xthorough.
  236. X
  237. X
  238. XAfter a pass has been made over  the  data  based  on  gecos
  239. Xinformation,  Crack  makes  further passes over the password
  240. Xdata using successive rules from the Scripts/dicts.rules  by
  241. Xloading  the  whole  of Dicts/bigdict file into memory, with
  242. Xthe rule being applied to each word from  that  file.   This
  243. Xgenerates a resident dictionary, which is sorted and uniqued
  244. Xso as to prevent wasting time on repetition. After each pass
  245. Xis  completed, the memory used by the resident dictionary is
  246. Xfreed up, and (hopefully) re-used when the  next  dictionary
  247. Xis loaded.
  248. X
  249. XThe Dicts/bigdict dictionary is created by Crack by merging,
  250. Xsorting,  and uniq'ing the source dictionaries, which are to
  251. Xbe found in the directory DictSrc  and  which  may  also  be
  252. Xnamed  in  the Crack shellscript, via the $STDDICT variable.
  253. X(The default value of $STDDICT is /usr/dict/words).
  254. X
  255. XThe file DictSrc/bad_pws.dat is a dictionary which is  meant
  256. Xto  provide  many  of  those common but non-dictionary pass-
  257. Xwords, such as 12345678 or qwerty.
  258. X
  259. XIf you wish to provide a dictionary of your own,  just  copy
  260. Xit  into  the  DictSrc  directory (use compress on it if you
  261. Xwish to save space; Crack will unpack it  whilst  generating
  262. Xthe  big  dictionary)  and  then  delete the contents of the
  263. XDicts directory by running Scripts/spotless.  Your new  dic-
  264. Xtionary will be merged in on the next run. For more informa-
  265. Xtion on dictionary attacks, see the excellent  paper  called
  266. X"Foiling  the  Cracker:  A  Survey  of, and Improvements to,
  267. XPassword  Security"  by   Daniel   Klein,   available   from
  268. Xftp.sei.cmu.edu  in  ~/pub/dvk/passwd.*.   Also, please read
  269. Xthe APPENDIX file supplied with this distribution.[5]
  270. X
  271. XHaving described the method of cracking, perhaps  we  should
  272. Xnow  investigate  the algorithm used to overlay the cracking
  273. Xmechanism.
  274. X
  275. X
  276. X
  277. X_________________________
  278. X  [5] Extra dictionaries (those detailed in Dan Klein's
  279. Xpaper)   can   be   obtained  via  anonymous  FTP  from
  280. Xftp.uu.net (137.39.1.9) as ~/pub/dictionaries.tar.Z; or
  281. Xcheck  an Archie database for other possible sources of
  282. Xdictionaries.
  283. X
  284. X
  285. X
  286. X
  287. X                       March 3, 1992
  288. X
  289. X
  290. X
  291. X
  292. X
  293. X                           - 5 -
  294. X
  295. X
  296. X5.  Crack Methodology - Part 2: Feedback Filters
  297. X
  298. XAs is stated above, Crack permutes  and  loads  dictionaries
  299. Xdirectly   into  memory,  sorts  and  uniques  them,  before
  300. Xattempting to use each of the words  as  a  guess  for  each
  301. Xusers'  password.  If Crack correctly guesses a password, it
  302. Xmarks the user as done and does not waste  further  time  on
  303. Xtrying to break that users password.
  304. X
  305. XOnce Crack has finished a dictionary  pass,  it  sweeps  the
  306. Xlist  of  users looking for the passwords it has cracked. It
  307. Xstores the cracked passwords in both plaintext and encrypted
  308. Xforms in a feedback file in the directory Runtime.  Feedback
  309. Xfiles have names of the form Runtime/F*.
  310. X
  311. XThe purpose of this is so that, when Crack is next  invoked,
  312. Xit  may recognise passwords that it has successfully cracked
  313. Xbefore, and filter them  from  the  input  to  the  password
  314. Xcracker.  This  provides  an instant list of crackable users
  315. Xwho have not changed their passwords  since  the  last  time
  316. XCrack was run. This list appears in a file with name out* in
  317. Xthe $CRACK_OUT directory, or on stdout, if  foreground  mode
  318. Xis invoked (see Options, below).
  319. X
  320. XIn a similar vein, when a Crack run terminates normally,  it
  321. Xwrites out to the feedback file all encrypted passwords that
  322. Xit has NOT succeeded in cracking.  Crack  will  then  ignore
  323. Xall of these passwords next time you run it.
  324. X
  325. XObviously, this is not desirable if  you  frequently  change
  326. Xyour  dictionaries  or  rules, and so there is a script pro-
  327. Xvided,  Scripts/mrgfbk  which  sorts  your  feedback  files,
  328. Xmerges  them  into one, and optionally removes all traces of
  329. X'uncrackable' passwords, so that your  next  Crack  run  can
  330. Xhave  a  go  at  passwords  it has not succeeded in breaking
  331. Xbefore.
  332. X
  333. XMrgfbk is invoked automatically if you run Scripts/spotless.
  334. X
  335. X6.  Crack Methodology - Part 3: Execution and Networking
  336. X
  337. XEach time Crack is invoked, whether  networked  or  not,  it
  338. Xgenerates  a diefile with a name of the form Runtime/D* (for
  339. Xnetwork cracks, this file is generated by RCrack, and is  of
  340. Xthe  form  Runtime/DR* which points to a real diefile, named
  341. XRuntime/RD* - see below for details).
  342. X
  343. XThese diefiles contain debugging information about the  job,
  344. Xand are generated so that all the jobs on the entire network
  345. Xcan be called quickly by invoking Scripts/plaster.  Diefiles
  346. Xdelete themselves after they have been run.
  347. X
  348. XAs you will read in the sections below, Crack has a -network
  349. Xoption:   This   is  designed  to  be  a  simple  method  of
  350. X
  351. X
  352. X
  353. X                       March 3, 1992
  354. X
  355. X
  356. X
  357. X
  358. X
  359. X                           - 6 -
  360. X
  361. X
  362. Xautomatically spreading the load of  password  cracking  out
  363. Xover  several  machines on a network, preferably if they are
  364. Xconnected by some form of networked filestore.
  365. X
  366. XWhen Crack -network is invoked, it filters its input in  the
  367. Xordinary  way,  and  then splits its load up amongst several
  368. Xmachines    which    are    specified    in     the     file
  369. XScripts/network.conf.
  370. X
  371. XThis file contains a series  of  hostnames,  power  ratings,
  372. Xflags,  etc,  relevant  to  the  running  of  Crack  on each
  373. Xmachine.  Crack then calls Scripts/RCrack  to  use  the  rsh
  374. Xcommand  (or  similar)  to  invoke Crack on the other hosts.
  375. XSee the RCrack script, and the example network.conf file for
  376. Xdetails.
  377. X
  378. X7.  Installation
  379. X
  380. XCrack is one of those most  unusual  of  beasties,  a  self-
  381. Xinstalling  program.  Some people have complained about this
  382. Xapparent weirdness, but it has  grown  up  with  Crack  ever
  383. Xsince  the  earliest  network  version,  when I could not be
  384. Xbothered to log into several different machines with several
  385. Xdifferent   architectures,   just  in  order  to  build  the
  386. Xbinaries. Once the necessary configuration options have been
  387. Xset,  the  executables  are  created via make by running the
  388. XCrack shellscript .
  389. X
  390. XCrack's configuration lies in two  files,  the  Crack  shell
  391. Xscript,  which contains all the installation specific confi-
  392. Xguration data, and the file Sources/conf.h,  which  contains
  393. Xconfiguration options specific to various binary platforms.
  394. X
  395. XIn  the  Crack  shellscript,  you  will  have  to  edit  the
  396. XCRACK_HOME  variable  to  the  correct value.  This variable
  397. Xshould be set to an absolute path name  (names  relative  to
  398. X~username  are  OK,  so  long  as you have some sort of csh)
  399. Xthrough which the directory containing Crack may be accessed
  400. Xon  ALL  the  machines that Crack will be run on. There is a
  401. Xsimilar  variable  CRACK_OUT  which  specifies  where  Crack
  402. Xshould  put  its output files - by default, this is the same
  403. Xas $CRACK_HOME.
  404. X
  405. XYou will also have to edit the file Sources/conf.h and  work
  406. Xout which switches to enable.  Each #define has a small note
  407. Xexplaining its purpose.  Where I have been  in  doubt  about
  408. Xthe portability of certain library functions, usually I have
  409. Xre-written it, so you should be OK.  Let  me  know  of  your
  410. Xproblems, if you have any.
  411. X
  412. XIf you will be using Crack -network you will  then  have  to
  413. Xgenerate  a  Scripts/network.conf file. This contains a list
  414. Xof hostnames to rsh to, what their binary  type  is  (useful
  415. Xwhen   running   a   network   Crack  on  several  different
  416. X
  417. X
  418. X
  419. X                       March 3, 1992
  420. X
  421. X
  422. X
  423. X
  424. X
  425. X                           - 7 -
  426. X
  427. X
  428. Xarchitectures), a guesstimate of their relative power  (take
  429. Xyour  slowest machine as unary, and measure all others rela-
  430. Xtive to it), and a list of per-host flags to  add  to  those
  431. Xspecified on the Crack command line, when calling that host.
  432. XThere is an example of such a file provided in  the  Scripts
  433. Xdirectory - take a look at it.
  434. X
  435. XIf ever you wish to specify a more precise figure as to  the
  436. Xrelative  power  of  your  machines,  or you are simply at a
  437. Xloss, play with the command make tests in  the  source  code
  438. Xdirectory.    This  can  provide  you  with  the  number  of
  439. Xfcrypt()s that your machine can do per second,  which  is  a
  440. Xnumber that you can plug into your network.conf as a measure
  441. Xof your machines' power (after  rounding  the  value  to  an
  442. Xinteger).
  443. X
  444. X8.  Usage
  445. X
  446. XOkay, so, let's assume  that  you  have  edited  your  Crack
  447. Xscript,  and  your Sources/conf.h file, where do you go from
  448. Xhere ?
  449. X
  450. X
  451. XCrack [options] [bindir] /etc/passwd [...other passwd files]
  452. X
  453. XCrack -network [options] /etc/passwd [...other passwd files]
  454. X
  455. X
  456. XWhere bindir is the optional name of the directory where you
  457. Xwant  the binaries installed.  This is useful where you want
  458. Xto be able to run versions of  Crack  on  several  different
  459. Xarchitectures.  If  bindir does not exist, a warning will be
  460. Xissued, and the directory created.
  461. X
  462. X     Note: bindir defaults to the name generic  if  not
  463. X     supplied.
  464. X
  465. X
  466. XNotes for  Yellow  Pages  (NIS)  Users:  I  have  occasional
  467. Xqueries  about  how  to get Crack running from a YP password
  468. Xfile.  There are several methods, but by far the simplest is
  469. Xto generate a passwd format file by running:-
  470. X
  471. X                  ypcat passwd > passwd.yp
  472. X
  473. Xand then running Crack on this file.
  474. X
  475. X9.  Options
  476. X
  477. X-f   Runs Crack in foreground mode, ie: the password cracker
  478. X     is  not backgrounded, and messages appear on stdout and
  479. X     stderr as you would expect.  This option is only really
  480. X     useful  for very small password files, or when you want
  481. X     to put a wrapper script around Crack.
  482. X
  483. X
  484. X
  485. X                       March 3, 1992
  486. X
  487. X
  488. X
  489. X
  490. X
  491. X                           - 8 -
  492. X
  493. X
  494. X     Foreground mode is disabled if you  try  running  Crack
  495. X     -network  -f on the command line, because of the insen-
  496. X     sibility of rshing to several machines in turn, waiting
  497. X     for  each  one  to finish before calling the next. How-
  498. X     ever, please read the section  about  Network  Cracking
  499. X     without NFS/RFS, below.
  500. X
  501. X-v   Sets verbose mode, whereby Crack will print every guess
  502. X     it is trying on a per-user basis.  This is a very quick
  503. X     way of flooding your filestore, but useful if you think
  504. X     something is going wrong.
  505. X
  506. X-m   Sends mail to any user  whose  password  you  crack  by
  507. X     invoking  Scripts/nastygram  with  their username as an
  508. X     argument.  The reason for using the script is so that a
  509. X     degree of flexibility in the format of the mail message
  510. X     is supplied; ie: you don't have to  recompile  code  in
  511. X     order to change the message.[6]
  512. X
  513. X-nvalue
  514. X     Sets the process to be nice()ed to value, so, for exam-
  515. X     ple,  the  switch -n19 sets the Crack process to run at
  516. X     the lowest priority.
  517. X
  518. X-network
  519. X     Throws Crack into network mode, in which it  reads  the
  520. X     Scripts/network.conf file, splits its input into chunks
  521. X     which are sized according to the power  of  the  target
  522. X     machine,  and  calls  rsh to run Crack on that machine.
  523. X     Options for Crack running on the target machine may  be
  524. X     supplied  on  the  command line (eg: verbose or recover
  525. X     mode), or in the network.conf file if they  pertain  to
  526. X     specific hosts (eg: nice() values).
  527. X
  528. X-r<pointfile>
  529. X     This is only for use  when  running  in  recover  mode.
  530. X     When  a  running  Crack  starts pass 2, it periodically
  531. X     saves its state in a pointfile, with a name of the form
  532. X     Runtime/P.*  This file can be used to recover where you
  533. X     were should a  host  crash.   Simply  invoke  Crack  in
  534. X     exactly  the  same  manner  as  the last time, with the
  535. X     addition of the -r switch,  (eg:  -rRuntime/Pfred12345)
  536. X_________________________
  537. X  [6] I'm uncertain about the wisdom of mailing someone
  538. Xlike this.  If someone browses your cracked user's mail
  539. Xsomehow, it's like a great big neon  sign  pointing  at
  540. Xthe  user  saying "This Is A Crackable Account - Go For
  541. XIt!".  Not to mention the false sense  of  security  it
  542. Xengenders  in  the  System Manager that he's "informed"
  543. Xthe user to change his  password.   What  if  the  user
  544. Xdoesn't  log  on  for 3 months? However, so many people
  545. Xhave wired it into their own versions of Crack, I  sup-
  546. Xpose it must be provided... AEM
  547. X<1b>9
  548. X
  549. X
  550. X                       March 3, 1992
  551. X
  552. X
  553. X
  554. X
  555. X
  556. X                           - 9 -
  557. X
  558. X
  559. X     switch.  Crack will startup and read the file, and jump
  560. X     to  roughly  where  it left off.  If you are cracking a
  561. X     very large password file, this can save oodles of  time
  562. X     after a crash.
  563. X
  564. X     If you were running a network Crack, then the jobs will
  565. X     again  be spawned onto all the machines of the original
  566. X     Crack.  The program will then check that the host it is
  567. X     running   on  is  the  same  as  is  mentioned  in  the
  568. X     pointfile.  If it is not, it will quietly  die.   Thus,
  569. X     assuming that you supply the same input data and do not
  570. X     change your network.conf file,  Crack  should  pick  up
  571. X     where  it  left off.  This is a bit inelegant, but it's
  572. X     better than nothing at the moment.
  573. X
  574. X     The method of  error  recovery  outlined  above  causes
  575. X     headaches  for  users who want to do multiprocessing on
  576. X     parallel architectures.  Crack is in no  way  parallel,
  577. X     and  because  of the way it's structured (reading stdin
  578. X     from shellscript frontends) it is a pain to divide  the
  579. X     work amongst several processes via fork()ing.
  580. X
  581. X     The hack solution to get several copies of  Crack  run-
  582. X     ning  on one machine with n processors at the moment is
  583. X     to insert n copies  of  the  entry  for  your  parallel
  584. X     machine  into the Scripts/network.conf file. If you use
  585. X     the -r option in these circumstances however, you  will
  586. X     get n copies of the recovered process running, only one
  587. X     of them will have the correct input data.
  588. X
  589. X     The old solution to this problem (see old documentation
  590. X     if  you  are interested) has been negated by the intro-
  591. X     duction of feedback mode, so the best bet in this  par-
  592. X     ticular  situation  is to wait until the other jobs are
  593. X     done (and have written out lists of  uncrackable  pass-
  594. X     words),  and then re-start the jobs from scratch.  Any-
  595. X     one whose password was not cracked  on  the  first  run
  596. X     will be ignored on the second, if they have not changed
  597. X     it since.  This is inelegant, but it's the best  I  can
  598. X     do in the limited time available.
  599. X
  600. X10.  Support Scripts
  601. X
  602. XThe Scripts directory contains a small number of support and
  603. Xutility  scripts,  some  of which are designed to help Crack
  604. Xusers check their progress.  Briefly, the most  useful  ones
  605. Xare:-
  606. X
  607. XScripts/shadmrg
  608. X     This is a small (but  hopefully  readable)  script  for
  609. X     merging  /etc/passwd  and /etc/shadow on System V style
  610. X     shadow password systems.  It produces the  merged  data
  611. X     to stdout, and will need redirecting into a file before
  612. X     Crack can work on it.  The script is meant to be fairly
  613. X
  614. X
  615. X
  616. X                       March 3, 1992
  617. X
  618. X
  619. X
  620. X
  621. X
  622. X                           - 10 -
  623. X
  624. X
  625. X     lucid,  on the grounds that I worry that there are many
  626. X     shadowing schemes out there, and perhaps not  all  have
  627. X     the same data format.
  628. X
  629. X     I have not wired this facility into the  Crack  command
  630. X     itself because the world does NOT revolve around System
  631. X     V yet, regardless of what some  people  would  have  me
  632. X     believe,  and I believe that the lack of direct support
  633. X     for NIS outlined above, sets a  precedent.   There  are
  634. X     just  too  many  incompatibilities  in  shadow password
  635. X     schemes for me to hardwire anything.
  636. X
  637. XScripts/plaster
  638. X     which is named after a dumb joke, but is a simple fron-
  639. X     tend  to  the Runtime/D* diefiles that each copy of the
  640. X     password cracker  generates.  Invoking  Scripts/plaster
  641. X     will  kill  off  all copies of the password cracker you
  642. X     are running, over the network or otherwise.
  643. X
  644. XScripts/status
  645. X     This script rshes to  each  machine  mentioned  in  the
  646. X     Scripts/network.conf  file,  and provides some informa-
  647. X     tion about processes and uptime on that machine.   This
  648. X     is  useful when you want to find out just how well your
  649. X     password crackers are getting on during a  Crack  -net-
  650. X     work.
  651. X
  652. XScripts/{clean,spotless}
  653. X     These are really just frontends to a makefile. Invoking
  654. X     Scripts/clean  tidies  up the Crack home directory, and
  655. X     removes probably unwanted files, but  leaves  the  pre-
  656. X     processed  dictionary bigdict intact.  Scripts/spotless
  657. X     does the same as Scripts/clean but obliterates  bigdict
  658. X     and  old  output files too, and compresses the feedback
  659. X     files into one.
  660. X
  661. XScripts/nastygram
  662. X     This is the shellscript that is invoked by the password
  663. X     cracker  to send mail to users who have guessable pass-
  664. X     words, if the -m option is used. Edit it at  your  lei-
  665. X     sure to suit your system.
  666. X
  667. XScripts/guess2fbk
  668. X     This script takes your  out*  files  as  arguments  and
  669. X     reformats  the  'Guessed'  lines  into a slightly messy
  670. X     feedback file, suitable for storing with the others.
  671. X
  672. X     An occasion where this might be  useful  is  when  your
  673. X     cracker  has  guessed  many peoples passwords, and then
  674. X     died for some reason (a crash?) before writing out  the
  675. X     guesses to a feedback file.  Running
  676. X
  677. X             Scripts/guess2fbk out* >> Runtime/F.new
  678. X
  679. X
  680. X
  681. X
  682. X                       March 3, 1992
  683. X
  684. X
  685. X
  686. X
  687. X
  688. X                           - 11 -
  689. X
  690. X
  691. X     will save the work that has been done.
  692. X
  693. X11.  Network Cracking without NFS/RFS
  694. X
  695. XFor those users who have some form of rsh  command,  but  do
  696. Xnot  have  a  a  networked  filestore running between hosts,
  697. Xthere is now a solution which will allow you to do networked
  698. Xcracking, proposed to me by Brian Tompsett at Hull.  Person-
  699. Xally, I consider the idea to be potty, but it fills in miss-
  700. Xing functionality in a wonderfully tacky manner.
  701. X
  702. XFrom the documentation above, you will note that Crack  will
  703. Xundo  the -f (output in foreground) option, if it is invoked
  704. Xwith the -network switch at the same time (see  the  Options
  705. Xsection  above).  This is true, but it does not apply if you
  706. Xspecify -f option in the network.conf file.
  707. X
  708. XThe practical upshot of doing this is that remote copies  of
  709. XCrack  can  be  made  to read from stdin and write to stdout
  710. Xover a network link, and thus remote  processing  is  accom-
  711. Xplished.   I  have  tweaked  Crack in such a way, therefore,
  712. Xthat if the -f option is specified amongst  the  crack-flags
  713. Xof  a  host  in  the network.conf, rather than backgrounding
  714. Xitself on the remote host, the rsh command on the server  is
  715. Xbackgrounded, and output is written directly to the files on
  716. Xthe server's filestore.
  717. X
  718. XThere are restrictions upon this  method,  mostly  involving
  719. Xthe number of processes that a user may run on the server at
  720. Xany one time, and that you will  have  to  collect  feedback
  721. Xoutput  together  manually  (dropping  it  into  the Runtime
  722. Xdirectory on the server).  However, it works. Also,  if  you
  723. Xtry  to use rsh as another user, you will suffer problems if
  724. Xrsh insists on reading something from your terminal  (eg:  a
  725. Xpassword  for  the  remote account).  Also, recovering using
  726. Xcheckpointing goes out the window  unless  you  specify  the
  727. Xname of the pointfile as it is named on the remote machine.
  728. X
  729. X12.  UFC Support and notes on fast crypt() implementations
  730. X
  731. XThe stdlib version of the crypt() subroutine  is  incredibly
  732. Xslow.   It is a massive bottleneck to the execution of Crack
  733. Xand on typical platforms that you get at universities, it is
  734. Xrare to find a machine which will achieve more than 50 stan-
  735. Xdard crypt() s per second.   On  low-end  diskless  worksta-
  736. Xtions,  you may expect 2 or 3 per second.  It was this slow-
  737. Xness of the crypt() algorithm which originally supplied much
  738. Xof the security Unix needed.[7]
  739. X
  740. X_________________________
  741. X  [7] See: "Password Security, A Case History"  by  Bob
  742. XMorris & Ken Thomson, in the Unix Programmer Docs.
  743. X
  744. X
  745. X
  746. X
  747. X                       March 3, 1992
  748. X
  749. X
  750. X
  751. X
  752. X
  753. X                           - 12 -
  754. X
  755. X
  756. XThere are now many implementations  of  faster  versions  of
  757. Xcrypt()  to  be found on the network.  The one supplied with
  758. XCrack v3.2 and upwards is called fcrypt().   It  was  origi-
  759. Xnally written in May 1986 by Robert Baldwin at MIT, and is a
  760. Xgood version of the crypt() subroutine.  I received  a  copy
  761. Xfrom Icarus Sparry at Bath University, who had made a couple
  762. Xof portability enhancements to the code.
  763. X
  764. XI rewrote most of the tables and the KeySchedule  generating
  765. Xalgorithm  in  the original fdes-init.c to knock 40% off the
  766. Xexecution overhead of fcrypt()  in  the  form  that  it  was
  767. Xshipped  to  me.   I inlined a bunch of stuff, put it into a
  768. Xsingle file, got  some  advice  from  Matt  Bishop  and  Bob
  769. XBaldwin  [both  of whom I am greatly indebted to] about what
  770. Xto do to the xform() routine  and  to  the  fcrypt  function
  771. Xitself,  and  tidied  up some algorithms.  I have also added
  772. Xmore lookup tables and reduced several  formula  for  faster
  773. Xuse.   Fcrypt() is now barely recognisable as being based on
  774. Xits former incarnation, and it is 3x faster.
  775. X
  776. XOn a DecStation 5000/200, fcrypt() is about 16 times  faster
  777. Xthan  the  standard  crypt (your mileage may vary with other
  778. Xarchitectures and compilers).  This speed puts fcrypt() into
  779. Xthe "moderately fast" league of crypt implementations.
  780. X
  781. XAmongst other crypt  implementations  available  is  UFC  by
  782. XMichael  Glad.   UFC-crypt is a version of the crypt subrou-
  783. Xtine which  is  optimised  for  machines  with  32-bit  long
  784. Xintegers  and  generally outperforms my fcrypt() by a factor
  785. Xof between 1 and 3, for a tradeoff of  large  memory  usage,
  786. Xand memory-cache unfriendliness.  Hooks for even more optim-
  787. Xised assembler versions of crypt()  are  also  provided  for
  788. Xsome  platforms  (Sun,  HP, ...).  Getting UFC to work on 16
  789. Xbit architectures is nearly impossible.
  790. X
  791. XHowever, on most architectures,  UFC  generates  a  stunning
  792. Xincrease  in  the power of Crack, and so, from v4.1 onwards,
  793. XCrack is written to automatically make use of UFC if it  can
  794. Xfind  it.   All  that you have to do is to obtain a suitable
  795. Xcopy of UFC (preferably a version which mentions that it  is
  796. Xcompatible  with  Crack v4.1, and unpack it into a directory
  797. Xcalled ufc-crypt in $CRACK_HOME, and then  delete  your  old
  798. Xbinaries.   UFC  will then be detected, compiled, tested and
  799. Xused in preference to fcrypt() by the Crack  program,  wher-
  800. Xever possible.
  801. X
  802. X13.  Conclusions
  803. X
  804. XWhat can be done about brute force attacks on your  password
  805. Xfile ?
  806. X
  807. XYou must get  a  drop-in  replacement  for  the  passwd  and
  808. Xyppasswd  commands; one which will stop people from choosing
  809. Xbad  passwords  in  the  first  place.   There  are  several
  810. X
  811. X
  812. X
  813. X                       March 3, 1992
  814. X
  815. X
  816. X
  817. X
  818. X
  819. X                           - 13 -
  820. X
  821. X
  822. Xprograms  to  do  this;  Matt  Bishop's  passwd+  and  Clyde
  823. XHoover's npasswd program are good examples which are  freely
  824. Xavailable.   Consult  an Archie database for more details on
  825. Xwhere you can get them from.
  826. X
  827. XIt would be nice if an organisation (such as CERT?) could be
  828. Xpersuaded  to  supply  skeletons of sensible passwd commands
  829. Xfor the public good, as  well  as  an  archive  of  security
  830. Xrelated utilities[8] on top of the excellent COPS.  However,
  831. Xfor Unix security to improve on a global scale, we will also
  832. Xrequire pressure on the vendors, so that programs are  writ-
  833. Xten correctly from the beginning.
  834. X
  835. X
  836. X
  837. X
  838. X
  839. X
  840. X
  841. X
  842. X
  843. X
  844. X
  845. X
  846. X
  847. X
  848. X
  849. X
  850. X
  851. X
  852. X
  853. X
  854. X
  855. X
  856. X
  857. X
  858. X
  859. X
  860. X
  861. X
  862. X
  863. X
  864. X
  865. X
  866. X
  867. X
  868. X
  869. X
  870. X
  871. X_________________________
  872. X  [8] COPS  is  available  for   anonymous   FTP   from
  873. Xcert.sei.cmu.edu (128.237.253.5) in ~/cops
  874. X
  875. X
  876. X
  877. X
  878. X                       March 3, 1992
  879. X
  880. X
  881. END_OF_FILE
  882. if test 30990 -ne `wc -c <'Docs/readme.txt'`; then
  883.     echo shar: \"'Docs/readme.txt'\" unpacked with wrong size!
  884. fi
  885. # end of 'Docs/readme.txt'
  886. fi
  887. echo shar: End of archive 5 \(of 5\).
  888. cp /dev/null ark5isdone
  889. MISSING=""
  890. for I in 1 2 3 4 5 ; do
  891.     if test ! -f ark${I}isdone ; then
  892.     MISSING="${MISSING} ${I}"
  893.     fi
  894. done
  895. if test "${MISSING}" = "" ; then
  896.     echo You have unpacked all 5 archives.
  897.     rm -f ark[1-9]isdone
  898. else
  899.     echo You still need to unpack the following archives:
  900.     echo "        " ${MISSING}
  901. fi
  902. ##  End of shell archive.
  903. exit 0
  904. exit 0 # Just in case...
  905.