Из старого. The Official RU.NETHACK F.A.Q.
Суббота, 09 Янв 2010 0:26Предисловие.
Warning: Use of this material may shorten
your life in the free world !
The Official Phreaker’s Manual
Если вас поймают, сошлитесь на незнание.
UNIX System Administrator Handbook
Назначение этого документа — ознакомить читателей конференции
RU.NETHACK с обсуждаемыми в ней темами и ответить на основные вопросы,
касающиеся сетевого хака. Этот документ не сделает вас хакерами, но
может быть поможет выбрать направление …
Прежде всего хочу избавить вас от распространенного заблуждения -
сеть, как таковую, невозможно сломать, ломать там нечего, так как под
понятием ‘сеть’ подразумевается физическая связь между компьютерами,
осуществляющими пересылку пакетов, с единой системой адресации. Ломать
сеть можно кусачками — например откусить сетевой кабель
. Под
‘взломом’ компьютеров будем понимать получение несанкционированного
доступа данным и/или машинному времени компьютера работающего в сети.
Для удобства употребляют выражение ‘ломать сеть’ когда речь идет о
‘взломе’ компьютеров в сети.
Компьютерные сети можно _условно_ разделить на два вида — On-Line
(время доставки пакета маленькое — несколько секунд) и Off-Line
(задержки при доставке пакетов могут достигать нескольких часов или
суток). Примером On-Line сети является Internet; примером Off-Line -
FidoNet.
F.A.Q. разделён на несколько логических частей. В первой вы
познакомитесь с принципами построения и работы двух видов On-Line
сетей, построенных по технологиям TCP/IP и X.25, а также с On-Line
сервисами. Вторая часть посвящена операционным системам, используемым
на компьютерах подключенных к сетям.
—
Предисловие к второму изданию.
Прошло четыре месяца со дня выпуска первого варианта RU.NETHACK
Frequently Asked Questions. Первая версия выпускалась в некоторой
спешке посему был допущен ряд досадных ошибок, которые, впрочем, не
были замечены большинством читателей конференции
В настоящем
издании я постарался их исправить, и надеюсь не внес новых…
В структуру FAQ внесены некоторые изменения: разделы относящиеся к
сетевым технологиям теперь собраны в первую часть, разделы посвященные
различным операционным системам во вторую. Естественно, добавились и
новые материалы (они отмечены в оглавлении символом ‘№’) — объём
увеличился почти в два раза.
Работа продолжается… Если вы хотите дополнить FAQ или что-либо
предложить — смотрите пункт 3.3 (Как связаться с авторами).
—
Несколько слов к Revision 0.28.
Уж утро близится, а F.A.Q. все нет…
Коротко: Добавлены несколько новых «ответов на предполагаемые
вопросы». Исправлены некоторые неточности. Иногда в тексте упоминается
раздел «Ресурсы», которого пока нет. Надеюсь, что появится в ближайшем
будущем. Как обычно и безрезультатно жду предложений и дополнений…
Исправленные, дополненные, новые пункты отмечены ‘*’ в оглавлении.
—
Благодарности.
Я благодарю всех, кто мне помогал и помогает составлять этот
документ. Это:
Anatoly Skoblov, Destructor, Uriah Ben-Iohanan, Andy Mc’Horin,
Werewolf, и другие.
[Editor, Denis Zhitenev]
—
Часть 1. Сети ЭВМ.
1.1 Internet (TCP/IP сети).
1.1.1 Общие принципы построения, адресация.
Internet — крупнейшая компьютерная сеть в мире, объединяющая
множество компьютеров, соединенных самыми разнообразными способами от
телефонных линий до систем спутниковой связи. В Internet используется
стек протоколов TCP/IP, который включает в себя:
IP(Internet Protocol) — межсетевой протокол, который обеспечивает
транспортировку без дополнительной обработки данных с одной машины на
другую;
UDP(User Datagram Protocol) — протокол пользовательских датаграмм,
обеспечивающий транспортировку отдельных сообщений с помощью IP без
проверки ошибок;
TCP(Transmissin Control Protocol) — протокол управления передачей,
обеспечивающий транспортировку с помощью IP с проверкой установления
соединения;
Каждый компьютер подключаемый к Internet получает свой уникальный
IP-адрес.
Internet-адрес имеет в длину четыре байта и состоит из двух
частей: сетевой и машинной. Первая часть означает логическую сеть, к
которой относится адрес; на основании этой информации принимаются
решения о маршрутизации ( routing ). Вторая часть идентифицирует
конкретную машину в сети.
По соглашению, IP-адреса записываются как десятичные числа (по одному
на каждый байт), разделенные точками, например 194.85.31.20
Каждый IP-адрес принадлежит сети определенного класса. Класс сети
определяется значением байта адреса:
0 8 16 24 31
+—————+———-+———-+————+
Класс A ¦0| номер сети ¦ номер узла ¦
+—————+———-T————————+
Класс B ¦10| номер сети ¦ номер узла ¦
+————————-+———-T————+
Класс C ¦110| номер сети ¦ номер узла ¦
+————————————+————+
Класс D ¦1110| групповой адрес ¦
+————————————————-+
Класс E ¦11110| зарезервировано ¦
L—————————————————
———T——————-T—————T—————¬
¦ Класс ¦ Диапазон значений ¦ Возможное ¦ Возможное ¦
¦ сети ¦ первого байта ¦ кол-во сетей ¦ кол-во узлов ¦
+——-+——————-+—————+—————+
¦ A ¦ 1 — 126 ¦ 126 ¦ 16777214 ¦
¦ B ¦ 128-191 ¦ 16382 ¦ 65534 ¦
¦ C ¦ 192-223 ¦ 2097150 ¦ 254 ¦
¦ D ¦ 224-239 ¦ — ¦ 2**28 ¦
¦ E ¦ 240-247 ¦ — ¦ 2**27 ¦
L——-+——————-+—————+—————
Каждый пакет, проходящий по сети содержит адрес получателя, и идет
согласно определенным правилам маршрутизации. Маршрутизация — это
процесс направления пакета по лабиринту сетей, находящихся между
источником и адресатом.
1.1.2 Доменная система имен (DNS).
DNS(Domain Name System) — это распределенная база данных, которая
содержит информацию о компьютерах, включенных в сеть Internet.
Характер данных зависит от конкретной машины, но чаще всего информация
включает имя машины, IP-адрес и данные для маршрутизации почты.
Для удобства,большинство компьютеров имеют имена. Доменная система
имен выполняет несколько задач, но основная ее работа — преобразование
имён компьютеров а IP-адреса и наоборот.
Пространство имен DNS имеет вид дерева доменов, с полномочиями,
возрастающими по мере приближения к корню дерева. Корень дерева имеет
имя «.»; под ним находятся домены верхнего уровня (корневые домены).
По историческим причинам существует два вида доменов верхнего
уровня. В США домены верхнего уровня отражают организационную
структуру, и как правило имеют трехбуквенные имена:
.gov — государственные учреждения,
.mil — военные учреждения,
.com — коммерческие организации,
.net — поставщики сетевых услуг,
.org — бесприбыльные организации,
.edu — учебные заведения;
Для доменов вне США, в соответствии с территориальным расположением
используются двухбуквенные коды стран ISO. Например:
www.spm.ru — в России
www.berlin.de — а Германии
www.hotex.nl — в Нидерландах
и т.д.
—
1.1.3 Работа в Internet.
Вы можете работать в Internet с помощью специальных программ. Вот
некоторые из них:
ping — позволяет определить время прохождения пакета до хоста.
traceroute — показывает путь прохождения пакетов по сети. (в Win95 и
NT — tracert.exe)
nslookup — позволяет просматривать содержимое DNS серверов.
telnet — устанавливает соединение с удаленной машиной (23 порт)
и позволяет вам работать в режиме удаленного терминала.
ftp — позволяет передавать файлы между машинами по протоколу
FTP (File Transfer Protocol) (21 порт).
finger — показывает информацию о пользователях находящихся в
данный момент на какой-либо машине.
Для работы с WWW (World Wide Web) используются программы Netscape
Navigator, Internet Explorer, и некоторые другие. Эти программы
устанавливают соединение с сервером (80 порт) и работают по протоколу
HTTP.
Замечание: для работы с ftp, telnet, finger и www необходимо
чтобы на машине, с которой вы устанавливаете соединение были запущены
соответствующие программы-сервера.
—
1.1.4 Как получить доступ в Internet?
Это вероятно один из самых насущных вопросов для любого читателя
конференции RU.NETHACK.
Как показывает практика, для того, чтобы начать ломать компьютеры
в Internet необходимо уже иметь туда выход, пусть даже временный или
минимальный. Не всё так сложно как вы думаете. В наше время получить
доступ в Internet не составляет никаких проблем. Вот некоторые из них:
- Самый легкий — если ваш институт ( если вы работаете на кафедре,
то всё многократно упрощается ) уже подключен к Internet, то
попытайтесь договориться о предоставлении вам (или вашей кафедре)
выхода туда.
- Если в вашем институте нет Internet, то это даже лучше — вы
можете стать основателем, остается только пойти к руководству и
убедить их в необходимости подключения [КАК !?! У нашего любимого
института нет выхода в I-Net ?!? Нет собственного WWW-сервера ?!?
Нет даже электронной почты ?!? Да нас не будут уважать !!! Каждый
уважающий себя ВУЗ ДОЛЖЕН иметь выход в Internet !!! ]. Если Вам
удалось убедить начальство — Вы выиграли и у вас будет свой,
_бесплатный_ Internet.
————————————————————
- Маленькое отступление.
- Прочитав этот абзац, один мой знакомый долго смеялся…
- однако, я оставляю его без изменений, если вы всерьёз
- хотите всем этим заниматься, это один из самых простых
- путей начать. Через некоторое время желание что-то ломать
- пропадёт. (;
————————————————————
- Если Вы работаете в солидной фирме, не имеющей выход в Internet,
то вышеприведенные рекомендации применимы и в этом случае.
На этом стоит временно прервать перечисление и заметить: ЕСЛИ У ВАС
ЕСТЬ ВОЗМОЖНОСТЬ ВОСПОЛЬЗОВАТЬСЯ ВЫШЕПЕРЕЧИСЛЕННЫМИ СПОСОБАМИ, НЕ
ЧИТАЙТЕ ДАЛЬШЕ, а попытайтесь воплотить их в жизнь, и у Вас не
возникнет множества проблем связанных с темой данной конференции.
Для всех остальных — продолжу:
- Платный доступ к Internet предоставляют находящиеся в вашем городе
фирмы ( т.н. провайдеры ). Можно заметить, что большинству людей
оплата их услуг пока не по карману, особенно если доступ нужен без
определенной цели, т.е. вы не зарабатываете денег используя
Internet.
- Кроме того, услугами по предоставлению доступа в Internet могут
заниматься фирмы находящиеся за пределами вашего города или
страны, используя в качестве транспорта X.25 сети ( например
SPRINT ).
—
1.1.5 Вирус Морриса, классический пример сетевого вируса.
2 ноября 1988 года Роберт Моррис младший, аспирант факультета
информатики Корнельского Университета с помощью написанного им вируса
инфицировал большое количество компьютеров, подключенных к сети
Internet.
Вирус Морриса поражал только компьютеры типа SUN 3 и VAX, которые
использовали варианты ОС UNIX версии 4 BSD.
Для своего распространения вирус использовал некоторые дефекты
стандартной операционной системы UNIX, установленной на многих
системах. Он также использовал механизм, предназначенный для доступа
к удаленным компьютерам в локальных сетях.
Вирус состоял из двух частей: главной программы и программы,
обеспечивающей его распространение. Главная программа после запуска на
очередной машине собирала информацию относительно других машин в сети,
с которыми она имеет связь. Она выполняла эту работу с помощью анализа
конфигурационных файлов и путем запуска системной утилиты, которая
дает информацию о текущем состоянии соединений в сети. Затем
производилась пересылка программы распространения на найденные машины,
затем она запускалась и обеспечивала пересылку и компиляцию остальной
части вируса. Затем весь процесс повторялся.
Наиболее заметным эффектом при распространении вируса, была все
же непрерывно возраставшая загрузка пораженных вирусом машин. По
истечении некоторого времени некоторые машины оказались настолько
загруженными распространением копий вируса, что не были способны
выполнять никакой полезной работы; некоторые машины исчерпывали память
для свопинга или таблицу текущих процессов и их приходилось
перегружать.
—
1.1.6 Сканирование портов.
————————————————————
- Маленькое отступление.
- Читателям, не знакомым с принципами работы TCP/IP я
- рекомендую пропустить эту главу, или ознакомиться с ней
- прочитав TCP/IP Programming Guide, или что-то подобное.
————————————————————
Иногда у вас может возникнуть потребность узнать какие сервисы
предоставляет определенный хост. Для этого существует ряд различных
программ сканирования портов.
Простейший вариант — это программы типа SATAN (Security Analysis
Tool for Auditing Networks), которые устанавливают соединение с каждым
TCP-портом, открывая полное TCP-соединение. Преимущества этого метода
заключаются в том, что пользователю, занимающемуся сканированием, не
нужно самому составлять ip-пакет, который будет использован для
сканирования, потому что он использует стандартные системные вызовы, и
ему не нужен доступ администратора ( обычно нужен, чтобы использовать
SOCK_RAW или открывать /dev/bpf, /dev/nit и т.д.). Недостатком этого
метода заключается в том, что его легче обнаружить, причем несколькими
способами,в частности TCP Wrapper’ами by Wietse Venema. Для устранения
этого недостатка были придуманы методы сканирования без установления
полного TCP-соединения, т.н. ‘полуоткрытое сканирование’.
Процесс установки TCP-соединения состоит из трех фаз: сторона,
устанавливающая соединение, сначала посылает TCP-пакет с установленным
флагом SYN, после чего принимающая сторона посылает TCP-пакет с
установленными флагами SYN и ACK в случае, если порт открыт, или
сбрасывает соединение с флагом RST если порт не активен. Третья фаза
происходит когда сторона,устанавливающая соединение,посылает финальный
TCP-пакет с установленным флагом ACK ( само собой все эти пакеты имеют
соответствующие sequence- и ack-номера, и т.д. ). Теперь соединение
установлено.
Сканирования с SYN-флагом.
~~~~~~~~~~~~~~~~~~~~~~~~~~
SYN-сканер посылает только первый пакет из трех и ждет SYN|ACK или
RST. Когда он получит либо то, либо другое, он будет знать, активен
этот порт или нет. Основное преимущество этого метода заключается в
том,что он не обнаруживается программами типа «SATAN» или TCP Wrappers
by Wietse Venema. Основные недостатки этого метода:
Этот метод обнаруживается некоторыми программами,которые проверяют
попытки коннекта с SYN-флагом ( например tcplog ), а также он
обнаруживается netstat(1)’ом.
Сторона,устанавливающая соединение, обычно должна составлять весь
IP-пакет. Для этого необходимо иметь доступ к SOCK_RAW ( в большинстве
операционных систем: getprotbyname(‘raw’) ) или /dev/bpf (Berkeley
Packet Filter), /dev/nit (Sun ‘Network Interface Tap’) и т.д. Для
этого необходимо, как правило, иметь уровень администратора.
Stealth-сканирование.
~~~~~~~~~~~~~~~~~~~~~
Этот метод основан на некорректном сетевом коде в BSD. Учитывая
то,что в большинстве операционных систем используется BSD’шный сетевой
код или производный от него,этот способ работает на большинстве систем
( наиболее очевидное исключение — маршрутиризаторы Cisco ). Этот метод
трудно обнаружить. Даже зная сам метод, разработка обнаруживающего
алгоритма весьма проблематична без устранения самой ошибки. Недостатки
этого способа:
Этот метод основан на ошибках в сетевом коде. Это значит, что
возможно, а точнее скорее всего, эти ошибки будут исправлены. Например
в OpenBSD это уже исправлено.
Нельзя поручиться, что этот способ будет нормально работать
в конкретной обстановке. Результаты могут быть разными в зависимости
от платформы и операционной системы, т.е. этот способ не вполне
надежен.
Используются TCP пакеты с установленными ACK и FIN флагами.Их надо
использовать,потому что,если такой пакет послать в порт при неоткрытом
соединении,всегда возвратится пакет с флагом RST. Существуют несколько
методов, использующих этот принцип:
метод #1:
Послать FIN-пакет. Если принимающий хост возвращает RST, значит
порт неактивен,если RST не возвращается, значит порт активен. Учитывая
тот факт, что этот метод работает на таком количестве хостов,
это — грустное свидетельство тому, какой некорректный сетевой код в
большинстве операционных систем.
метод #2
Послать ACK-пакет. Если TTL возвращаемых пакетов меньше, чем в
остальных полученных RST-пакетах, или если размер окна больше нуля,
то скорее всего порт активен.
Пример программы для разных видов сканирования TCP портов вы
можете найти в приложении 4.
—
1.1.7 Что такое Firewall?
Firewall — один из эффективных методов защиты внутренних сетей.
Физическая реализация этого сервиса может быть различной, но обычно
это программный или программно-аппаратный комплекс, обеспечивающий
анализ и обработку проходящего сквозь него сетевого трафика.
Обработка может вестись в широких пределах — от разграничения
доступа к различным адресным пространствам сети, до прозрачной
шифрации трафика с целью организации виртуальных частных сетей в
Internet.
Наиболее распространенное применение — организация доступа в
Internet из закрытых корпоративных сетей. В этом случае внутренние
пользователи получают полный или ограниченный доступ в Internet, а
доступ снаружи во внутреннюю сеть не допускается.
—
1.1.8 Что такое Denial of Service(DoS)?
Denial of Service — разновидность атак, приводящая к некорректной
работе или выходу из строя установленного на компьютеры программного
обеспечения. Атаки подобного типа относятся скорее к электронному
вандализму, чем к реальному взлому систем, поэтому подробнее этот
вопрос не будет рассматриваться. Ключевые слова для поиска информации
в Internet: [win]Nuke, land-attack, syn-flood, teardrop.
—
1.2 X.25 (Сети пакетной коммутации)
1.2.1 Общие принципы построения.
Основу X.25 сетей составляют Центры Коммутации Пакетов (ЦКП),
расположенные во многих городах и обеспечивающие доступ к сети. Обычно
абонент получает доступ к сети, соединяясь с ближайшим ЦКП, т.е. можно
получить доступ к сети из любого места, где есть телефонная связь, без
привязки к конкретному ЦКП.
Абоненты сети подключаются к ней для того, чтобы передавать
информацию или принимать ее от других абонентов или хост-машин. Для
этого в сети устанавливается временная логическая связь между этими
абонентами, называемая виртуальным соединением. После установления
виртуального соединения между абонентами может происходить обмен
данными одновременно в двух направлениях (дуплекс), причем задержка
передачи пакетов данных не превышает долей или нескольких секунд в
зависимости от загруженности сети.
—
1.2.2 Терминология.
NUA (Network Users Address /Сетевой Адрес Пользователя/ ) — число,
задающее сетевой адрес пользователя. Подробнее о формате см. п. 2.1.3.
NUI (Network User Identificator /Идентификатор Сетевого Пользователя/)
- код доступа и пароль. Обычно предоставляется поставщиком сетевых
ресурсов и используется для определения оплаты за услуги.
DNIC (Data Network Identification Code /Код идентификации сети/) -
представляет из себя 4 цифры, которые в полном сетевом адресе задают
код сети данных. Подробнее в п. 2.1.3 и в приложении 1.
PAD (Packet Assemble Disassembler / Сборщик/разборщик пакетов /) — это
устройство позволяющее с помощью обычного терминала работать с сетями
коммутации пакетов, т.к. терминалы передают не блоки данных,а символы.
—
1.1.3 Работа с X.25
Для работы с X.25 требуется терминальная программа (например
Telemate или Telix). Позвонив модемом на ближайший узел сети пакетной
коммутации, вы подключаетесь к ПАД, который получает символы для
передачи по сети и формирует из них пакеты, а также выполняет и
обратную операцию разборки пакетов и передачи символов на терминал.
Как уже говорилось ранее, сети пакетной коммутации являются
транспортом, позволяющим вам работать со многими системами, которые к
нему подключены. Для этого необходимо знать адрес системы, с которой
вы предполагаете работать. Кроме того, большинство систем снабжено
средствами идентификации пользователей, т.е. требуют для работы с ними
имя_пользователя и пароль. Это связано, в первую очередь с реверсивной
оплатой сетевых услуг — владельцы подключенной к сети системы платят
провайдеру за время соединения пользователей с ней, а затем могут
брать с пользователей плату за предоставляемые услуги.
—
1.2.4 Работа с ПАД.
Работа пользователя с ПАД происходит в двух режимах: в командном
и передачи данных. В начале своей работы с ПАД пользователь находится
в командном режиме. При установлении соединения пользователь переходит
в режим передачи данных. В режиме передачи данных происходит обмен
информацией с удаленным ресурсом. При необходимости непосредственного
взаимодействия с ПО ПАД пользователь может перейти в командный режим,
введя символ внимания — как правило, CTRL/P. В командном режиме
пользователь может использовать следующие команды:
CON — установление соединения через сеть Х.25 [*]
LOC — установление локального соединения
CLR — разрыв соединения [**]
PAR? — просмотр текущих значений параметров Х.3 [***]
SET — установление новых значений параметров Х.3
SET? — установление новых значений параметров Х.3 и их просмотр
PROF — установление новых значений совокупности параметров X.3
INT — посылка срочных данных
RESET — сброс соединения
STATUS — текущий статус соединения
В ответ на команды пользователя ПАД выдает диагностические
сообщения:
————————————————————-¬
¦ Сообщение ПАД Значение сообщения ¦
+————————————————————+
¦ COM соединение установлено ¦
¦ ERR синтаксическая ошибка в команде ¦
¦ RESET возможная потеря данных на пакетном уровне¦
¦ FREE ответ на команду ПАД STATUS,при отсутствии¦
¦ соединения ¦
¦ ENGAGED ответ на команду ПАД STATUS,при установ- ¦
¦ ленном соединении ¦
¦ CLR CONF разъединение выполнено ¦
¦ CLR индикация разъединения по одной из следу- ¦
¦ ющих причин: ¦
¦ 0 DTE удаленный DTE разорвал соединение ¦
¦ 1 OCC номер занят ¦
¦ 3 INV неправильный запрос средств ¦
¦ 5 NC сеть переполнена ¦
¦ 9 DER канал неисправен ¦
¦ 11 NS доступ запрещен ¦
¦ 13 NP нет доступа ¦
¦ 17 RPE удаленная процедурная ошибка ¦
¦ 19 ERR местная процедурная ошибка ¦
¦ 21 PAD разъединил местный ПАД ¦
¦ 25 NRC нет реверсивной оплаты ¦
¦ 33 INC несовместимый адрес назначения ¦
¦ 41 NFC нет быстрой выборки ¦
¦ 128 DTE канал зарезервирован ¦
¦ 129 DTE удаленный DTE не готов ¦
¦ 130 DTE канал является исходящим ¦
¦ 131 DTE DTE работает по протоколу Х.28 ¦
¦ 132 DTE DTE отсоединено ¦
¦ 133 DTE DTE недоступно ¦
¦ 134 DTE канал не существует ¦
¦ 135 DTE канал рестартован ¦
¦ 136 DTE нет связи по Х.25 ¦
¦ 137 DTE адрес удаленного DTE не существует ¦
¦ 138 DTE нет виртуального канала ¦
L————————————————————-
[*] — В некоторых случаях команду ‘CON’ пропускают или заменяют ‘C’.
[**] — В некоторых случаях заменяется командой BYE.
[***] — Значения параметров X.3 приводятся в приложении 2.
—
1.1.5 Формат адреса при межсетевом соединении.
— 0 -
+- 1 — Океания
+- 2 — Европа
—— признак того, +- 3 — Америка
¦ что адрес задан в полном виде +- 4 — Азия
¦ DNIC — код сети,где: +- 5 — Австралия
¦ —- код региона 0 — 9
main()
{
struct passwd *p;
while(p = getpwent())
printf(«%s:%s:%d:%d:%s:%s:%s\n», p->pw_name, p->pw_passwd, p->pw_uid,
p->pw_gid, p->pw_gecos, p->pw_dir, p->pw_shell);
}
—
2.2.2 Как узнать пароль в UNIX ?
Вопреки распространенным мнениям, пароли в UNIX не могут быть
расшифрованы. Шифpуются не паpоли. Шифpуется Salt. Salt — это две
первые буквы (5f) в 5fg63fhD3d5g — это то, что все считают шифрованным
паролем и находится в passwd во втором поле записи, cм. пред. пример.
Как задается пароль в Unix ?
a) Система вырабатывает Salt — случайные две буквы.
б) Запрашивает у пользователя пароль.
в) Шифрует Salt используя DES, пароль используется как ключ. (*)
г) Записывает Salt, плюс pезультат шифpования в passwd.
(*) В качестве метода шифрования кроме DES в некоторых системах
используют MD5.
Идентификация пользователя проходит в два этапа- сначала на запрос
«Login:» пользователь вводит свой login_name, затем программа login
шифрует Salt используя в качестве ключа введённое после запроса
«Password:» слово, и результат сравнивает с записанной в passwd
строкой.
К сожалению
в настоящее время не имеется _доступной_ аппаратуры
для подбора пароля методом полного перебора за приемлемое время.
Поэтому программы ломания паролей используют словари ( wordlists ).
Каждое слово из словаря используется в качестве ключа для шифровки
Salt и результат сравнивается с содержимым passwd.
Ссылки на программы, подбирающие пароли по словарям или полным
перебором смотрите в разделе ‘Ресурсы’.
—
2.2.3 Некоторые методы взлома UNIX.
%PATH%
~~~~~~
Если ваш администратор забыл убрать из переменной окружения %PATH%
«.»(текущий каталог), то этим можно воспользоваться положив в каталог
программу-троянца(2.1.4) с именем какой-либо наиболее употребительной
команды системы (например ls). Тогда при попытке администратора
просмотреть содержимое этого каталога может запустится ваша программа,
делающая свое черное дело
.
Вообще, в некоторых системах стоит внимательнее посмотреть на
порядок перечисления каталогов в переменной PATH, а также расположение
часто запускаемых из командной строки программ.
UID SHELLS.
~~~~~~~~~~~
Когда бит ‘UID’ поставлен у программы — оболочки ( shell ), ее
выполнение изменяет ваш user id на user id владельца этой программы,
и вы будете использовать полученный acccount пока не выйдите из этой
вторичной оболочки. Это дает вам возможность исполнять любые команды
под user id полученного account’a. Это лучше, чем знание пароля для
account’a, вы можете пользоваться account’ом пока существует этот файл
в системе, даже если владелец сменит пароль. Обычно, когда получают
доступ к account’у, делают копию shell в какой-то директорий, и ставят
UID и GID биты. Теперь если доступ к этому account’у потерян, можно из
другого запустить UID-shell и получить необходимый доступ.
UID и GID биты ставятся программой chmod. Например:
chmod 6555 /tmp/sh
Изменение UID программ.
~~~~~~~~~~~~~~~~~~~~~~~
Если вы имеете доступ по_записи(write access) к UID файлу,то можно
легко превратить его в оболочку. Скопируйте файл, затем наберите:
cat /bin/sh > [uid файл]
Это заменит его содержимое на содержимое shell, но UID останется
прежним. Теперь запустите заменённую программу, сделайте скрытый UID
shell, и верните UID файл в прежнее состояние из копии. В настоящее
время в последних версиях UNIX-систем при попытке записи в файл с
установленным битом ‘s’, этот бит сбрасывается, что делает невозможным
применение данного метода.
Как найти рутовские файлы с suid ? Попробуйте:
find / -user root -perm -6000 -print
Срыв стека.
~~~~~~~~~~~
Самая новомодная методика взлома UNIX. В программах написанных на
языке С,под массивы отводится место в стеке программы. Если при работе
с таким массивом происходит запись в массив за его границей, это
приводит к разрушению стека программы и непредсказуемым результатам.
Например при выходе из модуля происходит переход по случайному адресу.
Переполнения стека приводит к изменению адреса возврата из функции
и может быть использовано для изменения нормального хода выполнения
программы. Логично было бы заставить программу выполнить какие-то
незапланированные действия, например, запустить(spawn) shell. Но если
в программе не содержится необходимого кода? Как поместить необходимый
код в адресное пространство инструкций? Необходимо поместить код для
выполнения в переполняемый буфер и переписать адрес возврата на точку
внутри этого буфера. Код, при выполнении которого происходит запуск
shell, получил название ‘Shell Code’. Если программа, из которой
происходит запуск shell проинсталлирована как suid root, то получается
root shell.
Пример программы, реализующей вышеописанные действия приводится в
приложении 6.
Поиск программ с возможностью срыва стека.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Как было сказано выше, переполнения буфера происходят из-за
помещения в него большего количества информации, чем предполагалось.
Так как Язык C не имеет каких-либо встроенных средств для проверки
границ массивов данных, переполнения часто встречаются. Стандартная
библиотека С предоставляет ряд функций для копирования и конкатенации
строк, и эти функции не имеют проверок границ. Вот некоторые из этих
функций: strcat(), strcpy(), sprintf() и vsprintf(). Эти функции
используют строки заканчивающиеся символом ‘\0′ и не проверяют на
переполнение при обработке принимаемой строки. gets() — это функция,
которая считывает строку со стандартного ввода (stdin) в буфер до тех
пор, пока не встретит символ новой строки или EOF. Эта функция не
производит проверки на переполнение буфера. С семейством функций
scanf() может возникнуть такая же ситуация, если в строке формата
используется «%s» и принимающая строка недостаточно велика. Если
принимающий массив какой-нибудь из этих функций представляет собой
буфер постоянной длины и данные, его заполняющие каким-либо образом
зависят от ввода или другой информации, зависящий от пользователя,
то скорее всего вы можете вызвать ситуацию переполнения буфера.
Другая, часто использующаяся при программировании конструкция, это
цикл посимвольного ввода из stdin или другого файла в буфер до тех
пор, пока не будет встречен символ конца строки (EOL), конца файла
(EOF) или другой разделитель. В такой конструкции обычно используются
функции getc(), fgetc(), или getchar(). Если при этом нет проверок на
переполнение, то в таком коде тоже легко можно вызвать переполнение
буфера.
Программа grep играет значительную роль в поиске таких слабых мест
в программах. Исходные тексты свободно распространяемых операционных
систем вполне доступны. И этот факт становится весьма интересным,
учитывая то, что многие коммерческие операционные системы базируются
на исходных текстах свободно распространяемых систем. В общем,изучайте
исходные тексты UNIX !
—
2.2.4 Как научится не оставлять за собой следов ?
Файлы протоколов работы (log-files).
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
UNIX хранит системные протоколы в следующих файлах:
/var/log/utmp (/etc/utmp) — запись о вашем текущем присутствии в
cистеме. Используется программой who.
/var/log/wtmp (/usr/adm/wtmp) — протокол всех вхождений в систему.
Используется программой last.
/var/log/lastlog (/usr/adm/lastlog) — Дата последнего входа в систему
каждого пользователя. Выдается на экран
программой login.
Это не текстовые файлы и отредактировать их в vi руками не
получится. Для того, чтобы стереть информацию о своём присутствии,
надо использовать специальную программу, написанную для этих целей.
Пример такой программы приведён в приложении 7.
Часто информация о входах пользователей и о некоторых их действиях
(например запуск su) выдается на консоль администратору и в системный
лог, который может называться /var/log/messages. Для модификации этого
файла можно воспользоваться редактором ed или vi.
Программа CRON.
~~~~~~~~~~~~~~~
Cron — программа, которая запускает другие задачи с некоторой
периодичностью. Описание этих задач и времени их запуска хранятся в
файлах в двух директориях: /usr/lib и /usr/spool/cron.
Файл crontab в директории /etc или /usr/lib описывает системные
задачи, которые надо запускать с определённой периодичностью. Формат
этого файла:
минуты часы день_месяца месяц_года день_недели коммандная_строка
[0-59] [0-23] [1-31] [1-12] [1-7] [путь, аргументы]
Пример строки из crontab:
0 1 * * * /bin/sync
Это значит, что надо запускать команду sync, содержащуюся в директории
/bin в час ночи каждый день. Команды выполняемые из /usr/lib/crontab
получают привилегии root (UID = 0).
В каталоге /usr/spool/crontabs, содержатся файлы имеющих имена
системных account’ов. Эти файлы содержат поля, сходные с содержащимися
в файле /usr/lib/crontab, но команды из этих полей выполняются с ID
пользователя с именем, соответствующим имени этого файла. Формат полей
аналогичен.
Обычно с помощью утилиты cron запускаются программы, проверяющие
целостность системы: проверяются длинна и/или контрольные суммы
файлов, наличие в системе пользователей с UID = 0, и т.д. О всех
подозрительных явлениях пишется письмо root’у. При модификации файлов
cron пишется протокол в файл /usr/adm/cronlog.
В некоторых системах, например во FreeBSD существуют командные
файлы /etc/daily, /etc/weekly и /etc/monthly. /etc/daily запускается
cron’ом ежедневно в 2:00am и сравнивает информацию выдаваемую по
команде ls -laT для всех suid’ных файлов с информацией предыдущего
дня. Иными словами /etc/daily сравнивает /var/log/setuid.today и
/var/log/setuid.yesterday. О всех изменениях посылаются письмо
администратору. Так что, если вы изменили или добавили какой-нибудь
SUID’ный файл, не забудьте сделать соответствующие изменения в этих
двух файлах.
—
2.3 Windows NT и Windows95.
Достаточно большое количество машин в интернете находятся под
управлением операционных систем Windows 95 или Windows NT. Эти системы
отличаются от UNIX-систем дружественным, для простых пользователей,
графическим интерфейсом. Особенно большое распространение получила
система Windows95. Еще одно важное отличие этих систем в том, что
_начальная_ концепция защиты в них формулируется следующим образом:
«Что на запрещено, то разрешено», в отличие от UNIX-систем, где законы
несколько другие: «Что не разрешено, то запрещено».
Стоит заметить, что в Windows-подобных системах в стандартной
поставке отсутствует такой сервис, как удаленный терминальный доступ
(telnet) и удаленное использование машинного времени не предусмотрено.
—
2.3.1 Как через Internet подключиться к другой Win’95 машине?
Многие пользователи, работающие в Internet из своих локальных
сетей открывают доступ к своим дискам, например для товарищей по
работе или каких-либо других целей. Если такая локальная сеть не
защищена Firewall’ом (1.1.7), то информация этих компьютеров может
стать доступной из Internet по протоколу Netbios-via-TCP/IP.
Для подключения дисков удаленной машины через Internet достаточно
внести IP-адрес и имя машины в файл %WinDir%\hosts на вашей машине,
затем подключить удаленный диск воспользовавшись командой «NET USE»
или с помощью меню «Сетевое окружение\Найти компьютер». Обычно все это
работает если между вашей и удаленной машиной есть устойчивая связь.
Время прохождения пакетов можно проверить воспользовавшись программой
ping, а доступность портов — установив telnet-соединение c 139 портом
удаленной машины.
Пару слов о nbtstat. Эта полезная программа, входящая в состав
Windows95 и Windows NT показывающая информацию о удаленном компьютере,
например пользователей, работающих на машине.
—
2.3.2 Как узнавать различные пароли в Win’95?
Windows 95 хранит свои пароли в двух местах — в registry и в *.PWL
файлах. Пароли к ScreenSaver’у и к Общим (shared) ресурсам хранятся в
registry. Пароли пользователей на вход в машину — в файлах типа:
%WinDir%\»имя_пользователя».PWL
В отличии от UNIX, пароли пользователей могут быть восстановлены
с наименьшей затратой сил. Windows API имеет мало документированные
функции (WNetEnumCachedPasswords) для получения паролей _текущего_
пользователя, этим пользуется программа PWLVIEW by Vitas Ramanchauskas
Программа glide самостоятельно расшифровывает информацию в PWL-файлах,
но с связи с этим работает не на всех версиях Windows 95.
Программа w95rv by Hard Wisdom показывает пароли к общим ресурсам,
хранящимся в registry:
H_K_L_M\Software\Microsoft\Windows\CurrentVersion\Network\LanMan\…
Во избежание
вопросов «Где взять?» и т.к. homepage авторов не
известны, файлы выложены в Internet:
www.nether.net/~dzh/w95/pwlview.zip
www.nether.net/~dzh/w95/w95rv.zip
www.nether.net/~dzh/w95/pass.zip
программу glide.c можно найти на любом поисковом сервере.
—
Часть 3.
Разное.
3.1 Условия распространения.
Данный документ может свободно распространяться в электронном виде
при условии сохранения его целостности. Вы можете свободно передавать
и применять его если это не связано с получением прибыли. Коммерческое
использование запрещено, штраф $10.000(десять тысяч долларов США).
ПPEДOCТEPEЖEHИE издaтeлям гaзeт, жypнaлoв, бpoшюp, книг и пpочей
коммерческой пeчaтнoй пpoдyкции:
- КAТEГOPИЧECКИ зaпpeщeнa пepeпeчaткa нa твepдыx нocитeляx дaннoгo
фaйлa, пoлнocтью или чacтичнo бeз пpедвapитeльнoгo coглacoвaния c
peдaктopoм.
—
3.2 Где найти свежую версию FAQ ?
BBS:
____ _____/\ _________ ____ _____________
/ __ \/ __ / \/ / ___/ _ \/ __ /_ __/ Every Night 23:59-09:01
_//_/ / __ / /___ / // / __ / / / Phone +7-(812)-395-3264
/____ /____/__/\ /\____/\_____/__/ /__/ MaxSpeed 14400 (MNP/V42b)
\/ _____________/\ _____________ ____ /\ ___
FidoNet: 2:5030/493 / ___/_ __/ \ ___ __/ / _ \/ \/ /
ASCNet: 111:3000/10 /__ / / / / \ \ / / / / // / /
ABCNet: 123:1000/30 \____/ /__/ /_/ \__\/__/ /__/\_____/__/\ /
\/
FREQ: NETHACK
FTP:
ftp://proxy.etu.spb.ru/pub/texts/neth_faq.zip
HTTP:
http://www.nether.net/~dzh/neth_faq.zip
—
3.3 Как связаться с авторами ?
Связаться с редактором этого документа можно написав письмо по
одному из адресов:
FidoNet: 2:5030/493@fidonet.org
E-Mail : dzh@nether.net
Вы можете принять участие в работе над следующими версиями FAQ
в качестве:
- соавтора
- консультанта
- beta-тестера
пишите…
—
3.4 Библиография.
1. Farmer D., Venema W., Improving the Security of Your Site by
Breaking Into it, Eindhoven University of Technology.
2. TCP port Stealth Scanning by Uriel Maimon, PHRACK #49, November 08,
1996
3. Smashing The Stack For Fun And Profit by Aleph1, PHRACK #49,
November 08, 1996.
4. The alt.2600/#Hack FAQ by Voyager, A TNO Communications Production
5. Unix Use and Security, From The Ground Up, by The Prophet.
6. Безруков Н.Н., Компьютерная Вирусология. — Киев: КHИГА, 1989.
7. Сеть РОСПАК. Руководство пользователя.
8. Ю. Блэк. Сети ЭВМ: Протоколы, стандарты, интерфейсы: Пер. с англ.-
М.: Мир, 1990.
9. Мартин Дж. Вычислительные сети и распределённая обработка данных.
Пер. с англ. — М.: Финансы и статистика, 1985.
10. Эви Немт, Гарт Снайдер, Скотт Сиббас, Трент Р. Хейн. UNIX:
руководство системного администратора: Пер. с англ.-К.: BHV, 1996.
11. Building Internet Firewalls by D.Brent Charman and
Elizabeth D. Zwicky. Copyright (c) 1995 O’Relly & Associates, Inc.
—
======================================================================
Copyright (c) 1996-97-98 Denis Zhitenev
All Rights Reserved