home *** CD-ROM | disk | FTP | other *** search
/ Hacker Chronicles 1 / HACKER1.ISO / phrk2 / phrack22.8 < prev    next >
Text File  |  1992-09-26  |  17KB  |  296 lines

  1.  
  2.                                 ==Phrack Inc.==
  3.  
  4.                       Volume Two, Issue 22, File 8 of 12
  5.  
  6.             "]}`"`\`\`\`\`\`\`\`\`\`\`\`\`\`\`\`\`\`\`\`\`\`\`\`\`\
  7.             \`\`\                                             \`\`\
  8.             \`\          A Report On The InterNet Worm          \`\
  9.             \`\                                                 \`\
  10.             \`\                   By Bob Page                   \`\
  11.             \`\                                                 \`\
  12.             \`\              University of Lowell               \`\
  13.             \`\           Computer Science Department           \`\
  14.             \`\                                                 \`\
  15.             \`\                November 7, 1988                 \`\
  16.             \`\`\                                             \`\`\
  17.             \`\`\`\`\`\`\`\`\`\`\`\`\`\`\`\`\`\`\`\`\`\`\`\`\`\`\`\
  18.  
  19.  
  20. Here's the truth about the "Internet Worm."  Actually it's not a virus -
  21. a virus is a piece of code that adds itself to other programs, including
  22. operating systems.  It cannot run independently, but rather requires that its
  23. "host" program be run to activate it.  As such, it has a clear analog to
  24. biologic viruses -- those viruses are not considered live, but they invade host
  25. cells and take them over, making them produce new viruses.
  26.  
  27. A worm is a program that can run by itself and can propagate a fully working
  28. version of itself to other machines.  As such, what was loosed on the Internet
  29. was clearly a worm.
  30.  
  31. This data was collected through an emergency mailing list set up by Gene
  32. Spafford at Purdue University, for administrators of major Internet sites -
  33. some of the text is included verbatim from that list.
  34.  
  35. The basic object of the worm is to get a shell on another machine so it can
  36. reproduce further.  There are three ways it attacks: sendmail, fingerd, and
  37. rsh/rexec.
  38.  
  39. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  40.  
  41. The Sendmail Attack:
  42.  
  43. In the sendmail attack, the worm opens a TCP connection to another machine's
  44. sendmail (the SMTP port), invokes debug mode, and sends a RCPT TO that requests
  45. its data be piped through a shell.  That data, a shell script (first-stage
  46. bootstrap) creates a temporary second-stage bootstrap file called x$$,l1.c
  47. (where '$$' is the current process ID).  This is a small (40-line) C program.
  48.  
  49. The first-stage bootstrap compiles this program with the local cc and executes
  50. it with arguments giving the Internet hostid/socket/password of where it just
  51. came from.  The second-stage bootstrap (the compiled C program) sucks over two
  52. object files, x$$,vax.o and x$$,sun3.o from the attacking host.  It has an
  53. array for 20 file names (presumably for 20 different machines), but only two
  54. (vax and sun) were compiled in to this code.  It then figures out whether it's
  55. running under BSD or SunOS and links the appropriate file against the C library
  56. to produce an executable program called /usr/tmp/sh - so it looks like the
  57. Bourne shell to anyone who looked there.
  58.  
  59.  
  60. The Fingerd Attack:
  61.  
  62. In the fingerd attack, it tries to infiltrate systems via a bug in fingerd, the
  63. finger daemon.  Apparently this is where most of its success was (not in
  64. sendmail, as was originally reported).  When fingerd is connected to, it reads
  65. its arguments from a pipe, but doesn't limit how much it reads.  If it reads
  66. more than the internal 512-byte buffer allowed, it writes past the end of its
  67. stack.  After the stack is a command to be executed ("/usr/ucb/finger") that
  68. actually does the work.  On a VAX, the worm knew how much further from the
  69. stack it had to clobber to get to this command, which it replaced with the
  70. command "/bin/sh" (the bourne shell).  So instead of the finger command being
  71. executed, a shell was started with no arguments.  Since this is run in the
  72. context of the finger daemon, stdin and stdout are connected to the network
  73. socket, and all the files were sucked over just like the shell that sendmail
  74. provided.
  75.  
  76.  
  77. The Rsh/Rexec Attack:
  78.  
  79. The third way it tried to get into systems was via the .rhosts and
  80. /etc/hosts.equiv files to determine 'trusted' hosts where it might be able to
  81. migrate to.  To use the .rhosts feature, it needed to actually get into
  82. people's accounts - since the worm was not running as root (it was running as
  83. daemon) it had to figure out people's passwords.  To do this, it went through
  84. the /etc/passwd file, trying to guess passwords.  It tried combinations of: the
  85. username, the last, first, last+first, nick names (from the GECOS field), and a
  86. list of special "popular" passwords:
  87.  
  88. aaa             cornelius    guntis      noxious       simon
  89. academia        couscous     hacker      nutrition     simple
  90. aerobics        creation     hamlet      nyquist       singer
  91. airplane        creosote     handily     oceanography  single
  92. albany          cretin       happening   ocelot        smile
  93. albatross       daemon       harmony     olivetti      smiles
  94. albert          dancer       harold      olivia        smooch
  95. alex            daniel       harvey      oracle        smother
  96. alexander       danny        hebrides    orca          snatch
  97. algebra         dave         heinlein    orwell        snoopy
  98. aliases         december     hello       osiris        soap
  99. alphabet        defoe        help        outlaw        socrates
  100. ama             deluge       herbert     oxford        sossina
  101. amorphous       desperate    hiawatha    pacific       sparrows
  102. analog          develop      hibernia    painless      spit
  103. anchor          dieter       honey       pakistan      spring
  104. andromache      digital      horse       pam           springer
  105. animals         discovery    horus       papers        squires
  106. answer          disney       hutchins    password      strangle
  107. anthropogenic   dog          imbroglio   patricia      stratford
  108. anvils          drought      imperial    penguin       stuttgart
  109. anything        duncan       include     peoria        subway
  110. aria            eager        ingres      percolate     success
  111. ariadne         easier       inna        persimmon     summer
  112. arrow           edges        innocuous   persona       super
  113. arthur          edinburgh    irishman    pete          superstage
  114. athena          edwin        isis        peter         support
  115. atmosphere      edwina       japan       philip        supported
  116. aztecs          egghead      jessica     phoenix       surfer
  117. azure           eiderdown    jester      pierre        suzanne
  118. bacchus         eileen       jixian      pizza         swearer
  119. bailey          einstein     johnny      plover        symmetry
  120. banana          elephant     joseph      plymouth      tangerine
  121. bananas         elizabeth    joshua      polynomial    tape
  122. bandit          ellen        judith      pondering     target
  123. banks           emerald      juggle      pork          tarragon
  124. barber          engine       julia       poster        taylor
  125. baritone        engineer     kathleen    praise        telephone
  126. bass            enterprise   kermit      precious      temptation
  127. bassoon         enzyme       kernel      prelude       thailand
  128. batman          ersatz       kirkland    prince        tiger
  129. beater          establish    knight      princeton     toggle
  130. beauty          estate       ladle       protect       tomato
  131. beethoven       euclid       lambda      protozoa      topography
  132. beloved         evelyn       lamination  pumpkin       tortoise
  133. benz            extension    larkin      puneet        toyota
  134. beowulf         fairway      larry       puppet        trails
  135. berkeley        felicia      lazarus     rabbit        trivial
  136. berliner        fender       lebesgue    rachmaninoff  trombone
  137. beryl           fermat       lee         rainbow       tubas
  138. beverly         fidelity     leland      raindrop      tuttle
  139. bicameral       finite       leroy       raleigh       umesh
  140. bob             fishers      lewis       random        unhappy
  141. brenda          flakes       light       rascal        unicorn
  142. brian           float        lisa        really        unknown
  143. bridget         flower       louis       rebecca       urchin
  144. broadway        flowers      lynne       remote        utility
  145. bumbling        foolproof    macintosh   rick          vasant
  146. burgess         football     mack        ripple        vertigo
  147. campanile       foresight    maggot      robotics      vicky
  148. cantor          format       magic       rochester     village
  149. cardinal        forsythe     malcolm     rolex         virginia
  150. carmen          fourier      mark        romano        warren
  151. carolina        fred         markus      ronald        water
  152. caroline        friend       marty       rosebud       weenie
  153. cascades        frighten     marvin      rosemary      whatnot
  154. castle          fun          master      roses         whiting
  155. cat             fungible     maurice     ruben         whitney
  156. cayuga          gabriel      mellon      rules         will
  157. celtics         gardner      merlin      ruth          william
  158. cerulean        garfield     mets        sal           williamsburg
  159. change          gauss        michael     saxon         willie
  160. charles         george       michelle    scamper       winston
  161. charming        gertrude     mike        scheme        wisconsin
  162. charon          ginger       minimum     scott         wizard
  163. chester         glacier      minsky      scotty        wombat
  164. cigar           gnu          moguls      secret        woodwind
  165. classic         golfer       moose       sensor        wormwood
  166. clusters        gorgeous     morley      serenity      yaco
  167. coffee          gorges       mozart      sharks        yang
  168. coke            gosling      nancy       sharon        yellowstone
  169. collins         gouge        napoleon    sheffield     yosemite
  170. commrades       graham       nepenthe    sheldon       zap
  171. computer        gryphon      ness        shiva         zimmerman
  172. condo           guest        network     shivers
  173. cookie          guitar       newton      shuttle
  174. cooper          gumption     next        signature
  175.  
  176.  
  177. When everything else fails, it opens /usr/dict/words and tries every word in
  178. the dictionary.  It is pretty successful in finding passwords, as most people
  179. don't choose them very well.  Once it gets into someone's account, it looks for
  180. a .rhosts file and does an 'rsh' and/or 'rexec' to another host, it sucks over
  181. the necessary files into /usr/tmp and runs /usr/tmp/sh to start all over again.
  182.  
  183. Between these three methods of attack (sendmail, fingerd, .rhosts) it was able
  184. to spread very quickly.
  185.  
  186.  
  187. The Worm Itself:
  188.  
  189. The 'sh' program is the actual worm.  When it starts up it clobbers its argv
  190. array so a 'ps' will not show its name.  It opens all its necessary files, then
  191. unlinks (deletes) them so they can't be found (since it has them open, however,
  192. it can still access the contents).  It then tries to infect as many other hosts
  193. as possible - when it sucessfully connects to one host, it forks a child to
  194. continue the infection while the parent keeps on trying new hosts.
  195.  
  196. One of the things it does before it attacks a host is connect to the telnet
  197. port and immediately close it.  Thus, "telnetd: ttloop: peer died" in
  198. /usr/adm/messages means the worm attempted an attack.
  199.  
  200. The worm's role in life is to reproduce - nothing more.  To do that it needs to
  201. find other hosts.  It does a 'netstat -r -n' to find local routes to other
  202. hosts & networks, looks in /etc/hosts, and uses the yellow pages distributed
  203. hosts file if it's available.  Any time it finds a host, it tries to infect it
  204. through one of the three methods, see above.  Once it finds a local network
  205. (like 129.63.nn.nn for ulowell) it sequentially tries every address in that
  206. range.
  207.  
  208. If the system crashes or is rebooted, most system boot procedures clear /tmp
  209. and /usr/tmp as a matter of course, erasing any evidence.  However, sendmail
  210. log files show mail coming in from user /dev/null for user /bin/sed, which is a
  211. tipoff that the worm entered.
  212.  
  213. Each time the worm is started, there is a 1/15 chance (it calls random()) that
  214. it sends a single byte to ernie.berkeley.edu on some magic port, apparently to
  215. act as some kind of monitoring mechanism.
  216.  
  217.  
  218. The Crackdown:
  219.  
  220. Three main 'swat' teams from Berkeley, MIT and Purdue found copies of the VAX
  221. code (the .o files had all the symbols intact with somewhat meaningful names)
  222. and disassembled it into about 3000 lines of C.  The BSD development team poked
  223. fun at the code, even going so far to point out bugs in the code and supplying
  224. source patches for it!  They have not released the actual source code, however,
  225. and refuse to do so.  That could change - there are a number of people who want
  226. to see the code.
  227.  
  228. Portions of the code appear incomplete, as if the program development was not
  229. yet finished.  For example, it knows the offset needed to break the BSD
  230. fingerd, but doesn't know the correct offset for Sun's fingerd (which causes it
  231. to dump core); it also doesn't erase its tracks as cleverly as it might; and so
  232. on.
  233.  
  234. The worm uses a variable called 'pleasequit' but doesn't correctly initialize
  235. it, so some folks added a module called _worm.o to the C library, which is
  236. produced from:  int pleasequit = -1; the fact that this value is set to -1 will
  237. cause it to exit after one iteration.
  238.  
  239. The close scrutiny of the code also turned up comments on the programmer's
  240. style.  Verbatim from someone at MIT:
  241.  
  242.     From disassembling the code, it looks like the programmer is really
  243.     anally retentive about checking return codes, and, in addition,
  244.     prefers to use array indexing instead of pointers to walk through
  245.     arrays.
  246.  
  247. Anyone who looks at the binary will not see any embedded strings - they are
  248. XOR'ed with 81 (hex).  That's how the shell commands are imbedded.  The
  249. "obvious" passwords are stored with their high bit set.
  250.  
  251. Although it spreads very fast, it is somewhat slowed down by the fact that it
  252. drives the load average up on the machine - this is due to all the encryptions
  253. going on, and the large number of incoming worms from other machines.
  254.  
  255. [Initially, the fastest defense against the worm is is to create a directory
  256. called /usr/tmp/sh.  The script that creates /usr/tmp/sh from one of the .o
  257. files checks to see if /usr/tmp/sh exists, but not to see if it's a directory.
  258. This fix is known as 'the condom'.]
  259.  
  260.  
  261. Now What?
  262.  
  263. Most Internet systems running 4.3BSD or SunOS have installed the necessary
  264. patches to close the holes and have rejoined the Internet.  As you would
  265. expect, there is a renewed interest in system/network security, finding and
  266. plugging holes, and speculation over what will happen to the worm's creator.
  267.  
  268. If you haven't read or watched the news, various log files have named
  269. the responsible person as Robert Morris Jr., a 23-year old doctoral student at
  270. Cornell.  His father is head of the National Computer Security Center, the
  271. NSA's public effort in computer security, and has lectured widely on security
  272. aspects of UNIX.
  273.  
  274. Associates of the student claim the worm was a 'mistake' - that he intended to
  275. unleash it but it was not supposed to move so quickly or spread so much.  His
  276. goal was to have a program 'live' within the Internet.  If the reports that he
  277. intended it to spread slowly are true, then it's possible that the bytes sent
  278. to ernie.berkeley.edu were intended to monitor the spread of the worm.  Some
  279. news reports mentioned that he panicked when, via some "monitoring mechanism"
  280. he saw how fast it had propagated.
  281.  
  282. A source inside DEC reports that although the worm didn't make much progress
  283. there, it was sighted on several machines that wouldn't be on its normal
  284. propagation path, i.e. not gateways and not on the same subnet.  These machines
  285. are not reachable from the outside.  Morris was a summer intern at DEC in '87.
  286. He might have included names or addresses he remembered as targets for
  287. infesting hidden internal networks.  Most of the DEC machines in question
  288. belong to the group he worked in.
  289.  
  290. The final word has not been written...
  291.                                  ...it will be interesting to see what happens.
  292. _______________________________________________________________________________
  293. =========================================================================
  294.  
  295. Downloaded From P-80 International Information Systems 304-744-2253 12yrs+
  296.