albert, alex, alexander, algebra, aliases,
alphabet, amorphous, analog, anchor, andromache,
animals, answer, anthropogenic, anvils, anything",
aria, ariadne, arrow, arthur, athena,
atmosphere, aztecs, azure, bacchus, bailey,
banana, bananas, bandit, banks, barber,
baritone, bass, bassoon, batman, beater,
beauty, beethoven, beloved, benz, beowulf,
berkeley, berliner, beryl, beverly, bicameral,
brenda, brian, bridget, broadway, bumbling,
burgess, campanile, cantor, cardinal, carmen,
carolina, caroline, cascades, castle, cayuga,
celtics, cerulean, change, charles, charming,
charon, chester, cigar, classic, clusters,
coffee, coke, collins, commrades, computer,
condo, cookie, cooper, cornelius, couscous,
creation, creosote, cretin, daemon, dancer,
daniel, danny, dave, december, defoe,
deluge, desperate, develop, dieter, digital,
discovery, disney, drought, duncan, eager,
easier, edges, edinburgh, edwin, edwina,
egghead, eiderdown, eileen, einstein, elephant,
elizabeth, ellen, emerald, engine, engineer,
enterprise, enzyme, ersatz, establish, estate,
euclid, evelyn, extension, fairway, felicia,
fender, fermat, fidelity, finite, fishers,
flakes, float, flower, flowers, foolproof,
football, foresight, format, forsythe, fourier,
fred, friend, frighten, fungible, gabriel,
gardner, garfield, gauss, george, gertrude,
ginger, glacier, golfer, gorgeous, gorges,
gosling, gouge, graham, gryphon, guest,
guitar, gumption, guntis, hacker, hamlet,
handily, happening, harmony, harold, harvey,
hebrides, heinlein, hello, help, herbert,
hiawatha, hibernia, honey, horse, horus,
hutchins, imbroglio, imperial, include, ingres,
inna, innocuous, irishman, isis, japan,
jessica, jester, jixian, johnny, joseph,
joshua, judith, juggle, julia, kathleen,
kermit, kernel, kirkland, knight, ladle,
lambda, lamination, larkin, larry, lazarus,
lebesgue, leland, leroy, lewis, light,
lisa, louis, lynne, macintosh, mack,
maggot, magic, malcolm, mark, markus,
marty, marvin, master, maurice, mellon,
merlin, mets, michael, michelle, mike,
minimum, minsky, moguls, moose, morley,
mozart, nancy, napoleon, nepenthe, ness,
network, newton, next, noxious, nutrition,
nyquist, oceanography, ocelot, olivetti, olivia,
oracle, orca, orwell, osiris, outlaw,
oxford, pacific, painless, pakistan, papers,
password, patricia, penguin, peoria, percolate,
persimmon, persona, pete, peter, philip,
phoenix, pierre, pizza, plover, plymouth,
polynomial, pondering, pork, poster, praise,
precious, prelude, prince", princeton", protect,
protozoa, pumpkin, puneet, puppet, rabbit",
rachmaninoff, rainbow, raindrop, raleigh, random,
rascal, really, rebecca, remote, rick,
ripple, robotics, rochester, rolex, romano,
ronald, rosebud, rosemary, roses, ruben,
rules, ruth, saxon, scamper, scheme,
scott, scotty, secret, sensor, serenity,
sharks, sharon, sheffield, sheldon, shiva,
shivers, shuttle, signature, simon, simple,
singer, single, smile, smiles, smooch,
smother, snatch, snoopy, soap, socrates,
sossina, sparrows, spit, spring, springer,
squires, strangle, stratford, stuttgart, subway,
success, summer, super, superstage, support,
supported, surfer, suzanne, swearer, symmetry,
tangerine, tape, target, tarragon, taylor,
telephone, temptation, thailand, tiger, toggle,
tomato, topography, tortoise, toyota, trails,
trivial, trombone, tubas, tuttle, umesh,
unhappy, unicorn, unknown, urchin", utility,
vasant, vertigo, vicky, village, virginia,
warren, water, weenie, whatnot, whiting,
whitney, will, william, williamsburg, willie,
winston, wisconsin, wizard, wombat, woodwind,
wormwood, yacov, yang, yellowstone, yosemite,
zimmerman.
Внимательно просмотрев этот список, можно предположить, что Роберт читал книгу Френка Херберта «Дюна» или, по крайней мере, был знаком с ней. Как знать, может быть, именно она и вдохновила его на создание вируса? Но, так или иначе, вирус был написан, и всякую доступную машину проверял на десять паролей, выбранных их списка наугад, - это частично маскировало присутствие червя в системе. Если же ни один из паролей не подходил, вирус обращался к файлу орфографического словаря, обычно расположенного в каталоге “/usr/dict/words”. Подтверждает эти слова фрагмент вируса, приведенный ниже:
Конечно, сегодня наблюдается тенденция к усложнению паролей и выбору случайных, бессмысленных последовательностей, но вместе с этим растет и количество пользователей, - администраторы оказываются просто не в состоянии за всеми уследить и проконтролировать правильность выбора пароля. Поэтому, атака по словарю по-прежнему остается в арсенале злоумышленника. И не только злоумышленника, - ничуть не хуже она служит… администраторам!
В самом деле, - простейший способ уберечь пользователя от слабого пароля - проверить выбранный им пароль по словарю. Любопытно, но словари обеими сторонами (т.е. администраторами и злоумышленниками) обычно берутся из одних и тех же источников, и шансы проникнуть в такую систему, близки к нулю. Вот если бы научится составлять словарь самостоятельно! Но почему нет? Достаточно взять большой текстовой файл и разбить его на слова, отбрасывая заведомо лишние (предлоги, местоимения).
Но даже самый лучший словарь не всегда приводит к успешной атаке. Тем более, пытаясь подобрать пароль администратора, совсем уж тривиальной комбинации ожидать не следует. Но скорость бытовых компьютеров возросла в десятки тысяч раз, и лобовой перебор из утопии превратился в реальность. Там, например, на старших моделях процессора Pentium легко достигнуть скорости в 50.000 паролей в секунду, то есть все комбинации из строчечных латинских букв можно перебрать меньше чем за месяц - вполне приемлемый для злоумышленника срок! А если использовать несколько компьютеров, распараллелив вычисления, время поиска можно уменьшить во много раз - уже с помощью десяти компьютеров (вполне доступных группе злоумышленников) тот же пароль можно найти за пару дней!
Кену Томпсону приписывается высказывание "When in doubt, use brute force" («Если не знаешь, что выбирать - выбирай грубую силу»)
Ниже приведен демонстрационный вариант программы (на диске, прилагаемом к книге, он находится в файле “/SRC/crypt.ayth.hack.c”), осуществляющей лобовой подбор пароля. Конечно, для практического использования необходимо оптимизировать код, переписав критические участки на ассемблере, но эти вопросы выходят за рамки данной книги, и не рассматриваются в ней.
Перед запуском программы необходимо сформировать на диске файл “passwd” с помощью “crypt.auth.add.new.user”, задав полностью цифровой пароль, например, “12345” (это необходимо для ускорения перебора):