Михаил Фленов СанктПетербург бхвпетербург 2010 удк 681 06 ббк 32. 973. 26018. 2 Ф69
Скачать 3.69 Mb.
|
Глава 14 Советы хакера В этой главе собраны некоторые короткие советы на различные темы. Созда- вать главу ради каждого из этих советов просто не имеет смысла, поэтому я собрал их все под одной шапкой. Надеюсь, что вам поможет эта информация. В первом издании в этой главе был описан взлом, в текущем издании я сильно сократил эту главу и перенес часть информации на компакт-диск в документ под названием Doc/Взлом.doc. 14.1. Пароли Не буду повторять, что пароли должны быть сложными, а обращу ваше вни- мание на другое. Все пароли необходимо менять через определенные перио- ды времени. На своем сайте (а к нему многие имеют доступ) я это делаю ка- ждый месяц, потому что в Интернете слишком много хакеров, которые только и ищут легкую добычу. На другие компьютеры я также меняю пароли каждый месяц, а на особо важные — даже каждую неделю. Это сложно, потому что нужно постоянно запоминать новые комбинации, зато более безопасно. Единственное , что не меняется — это пароль на вход в Windows на моем но- утбуке . Со своим компьютером я работаю один и никого к нему не подпус- каю . Не потому, что боюсь обнародовать что-то важное, а больше из-за опа- сения случайно потерять данные. Многие хакеры, получая доступ к системе, некоторое время не проявляют никакой активности. Они осматриваются, знакомятся с принципами работы системы и определяются, как сделать, чтобы их не вычислили. Быстрых дей- ствий можно ожидать только от того, кто проникает в систему ради уничто- жения всех данных, и кому нет смысла уничтожать следы своего пребывания. Слава богу, таких взломов не так уж и много. Глава 14 420 Итак , проникнув в систему, хакер будет незаметно сидеть в ней, и вы можете ничего не заподозрить. Но если каждый месяц меняется пароль, то после очередной смены злоумышленник теряет свои права, и требуется повторный взлом для выявления нового пароля. Регулярное обновление паролей усложняет подбор. Как это происходит? Многие автоматизированные системы выявления атак могут без проблем определить , когда на отдельную учетную запись авторизуются несколько раз подряд . Чтобы обойти такие системы, хакеры проверяют пароли с опреде- ленной задержкой. Это делает взлом дольше, но, в конце концов, дает ре- зультат , если пароль несложный и постоянный. Если пароль изменяется, то вероятность успеть его подобрать до смены становится очень низкой. Чтобы увидеть это на примере, представим, что пароль может содержать только числа. Допустим, что на первоначальном этапе он был равен 7 000 000. Хакер тупым перебором прошел от 0 до 6 000 000, и в этот момент пароль меняется на 5 000 000. Дальнейшее сканирование хоть до миллиарда не даст результата, потому что диапазон, в котором находится новый пароль, уже пропущен. Второе преимущество от регулярной смены пароля заключается в том, что пока хакер будет подбирать действительно сложный пароль, он уже устареет, и воспользоваться им не удастся. Как заставить пользователя менять пароли через определенные промежутки времени ? Нет, не нужно ходить и нудить ему над ухом, есть способ проще и намного эффективнее. В Linux есть утилита chage, которая запускается сле- дующим образом: chage параметры пользователь В качестве параметра можно указывать следующие ключи: -m N — минимальное число дней ( N ) до смены пароля. Указав это значе- ние чуть меньше, чем максимальный период (см. следующий параметр), вы защитите систему от нежелательной смены паролей. Это значит, что если хакер захватит учетную запись, он не сможет изменить пароль. Ко- нечно же, злоумышленник тоже может выполнить команду chage , но только если у него есть права администратора. Три-четыре дня разницы между минимальным и максимальным значением необходимы для того, чтобы пользователь смог сменить пароль, пока он не устарел. Устанавли- вать разницу меньше трех дней не желательно, потому что существуют выходные , и если срок действия попадет на воскресенье, пользователь не успеет сменить пароль. По умолчанию используется значение −1, что со- ответствует отсутствию проверки; Советы хакера 421 -M N — максимальный диапазон в днях ( N ), в течение которого действует пароль . После этого пароль считается недействительным, и пользователь не сможет войти в систему. По умолчанию установлено 99999, что соот- ветствует бесконечности, а значит, пароль никогда не устареет; -d N — дата последнего изменения пароля. Параметр N указывает количе- ство дней, начиная с 1 января 1970 года. Если установить 1000, то полу- чится 27 сентября 1972 года. Чтобы не высчитывать дату в днях, можно указать ее явным образом в формате ГГГГ-ММ-ДД; -E дата — дата окончания действия пароля; -I N — период в днях, после которого неиспользуемая учетная запись блокируется . Рекомендую указать не менее 3 дней и не более 4 дней, чтобы приостановить действие записи на время отпуска или болезни работника ; -W N — количество дней до окончания срока действия пароля, когда поль- зователю будет выводиться предупредительное сообщение. Нежелательно указывать менее 3 дней, чтобы не попасть на выходные; -l пользователь — с этим параметром команда может вызываться лю- быми пользователями и позволяет им узнать информацию о времени жиз- ни их пароля. Чтобы получить сведения о пароле root, выполните дирек- тиву chage –l root Результат выполнения команды имеет следующий вид: Minimum: -1 Maximum: 99999 Warning: -1 Inactive: -1 Last Change: Feb 04, 2004 Password Expires: Never Password Inactive:Never Account Expires: Never Здесь отображаются следующие значения: • Minimum — минимальный срок действия пароля; • Maximum — максимальный период для пользования паролем; • Warning — количество дней, за которые будет выдаваться предупреж- дение о завершении срока действия пароля; • Inactive — максимальное количество дней, в течение которых учетная запись может не активироваться; • Last Change — последняя дата изменения; Глава 14 422 • Password Expires — дата окончания действия пароля; • Password Inactive — дата когда пароль стал неактивным; • Account Expires — дата окончания действия учетной записи. Чтобы задать максимальное количество дней жизни пароля в 60 дней выпол- ните команду: chage –M 60 robert Слишком частая смена паролей приводит к тому, что пользователи просто не успевают запомнить их. Из-за этого сложные комбинации начинают писать на бумаге, чтобы случайно не забыть, или просто меняют пароль на старый. Ваша задача — контролировать замену, и в то же время не стоит заставлять поль- зователя делать это слишком часто. Период в 2—3 месяца (или 60—90 дней) считается вполне приемлемым. А как проверить, что выбран достаточно сложный пароль, и при этом не указан снова старый? В этом нам поможет PAM-модуль pam_cracklib.so, который вы- полняет основные проверки и позволяет сделать их сложнее. Например, нельзя будет установить старый пароль или воспользоваться большей его частью. Чтобы включить модуль pam_cracklib.so необходимо добавить в файл /etc/pam.d/passwd следующую строку: password required pam_cracklib.so retry=5 minlength=8 В этой команде мы заставляем систему использовать библиотеку pam_cracklib.so. Параметр retry задает число попыток для ввода нового па- роля , а они понадобятся, если пользователь попытается задать слишком про- стую комбинацию. Параметр minlength задает минимальную длину пароля. 14.2. rootkit Проникнув в систему, хакер стремится укрепиться в ней и получить макси- мальные права. Например, он уже может выполнять на сервере команды от имени простого пользователя. Этого ему будет мало, поэтому следующая цель — получение прав root со всеми вытекающими отсюда последствиями. Для решения этой задачи взломщик должен получить возможность закачи- вать файлы и установить в системе одну из специализированных программ, повышающих права до администратора, — такие программы называются rootkit (набор администратора). После этого взломщик выполняет команды следующим образом: от имени простого пользователя, правами которого обладает хакер, дирек- тивы посылаются программе rootkit; программа rootkit выполняет полученные команды от имени администратора. Советы хакера 423 А как же rootkit получает возможность выполнять переданные ей команды с правами root? В этом помогает злополучный SGID-бит. Если он установлен, то программа будет выполняться в системе с правами администратора. Но , к счастью, не все так просто. Для rootkit нужно еще установить SGID-бит и в качестве владельца установить пользователя root. Тут есть два пути: если есть возможность выполнять команды chown и chmod , то хакер смо- жет без проблем реализовать все необходимые действия; можно подменить программу на ту, которая уже имеет установленный SUID- или SGID-бит. Вот почему в разд. 12.2 мы так усердно вычищали все SUID- и SGID- программы . Каждая из них — это дыра в безопасности, но иногда без этой прорехи жить невозможно. Вы должны все время следить за такими про- граммами , и в случае появления удалять из системы. Также нужно держать под контролем все изменения, которые происходят с программами, у кото- рых установлен бит SUID или SGID. Если их размер изменился, следует бить тревогу и восстанавливать исходное состояние программы, а также искать причину изменений. Вы должны быть внимательны, когда проверяете SGID-программы. Хакеры знают , что администраторы стараются свести количество таких программ к минимуму, поэтому идут на разные уловки. Например, они могут создать файл /mnt/mount со SUID-битом. Программа mount действительно требует этого бита, но должна находиться в директории /bin. Если вы просматриваете список найденных SUID-программ бегло, то можете не заметить отличие в пути или вообще не обратить на это внимания. Помимо этого, в названиях программ может идти игра букв. Например, /bin/login не требует такого бита. Хакер может создать файл /bin/1ogin (пер- вая буква заменена цифрой 1), и, поскольку визуально программа действи- тельно должна быть в системе, хотя и без SUID- и SGID-бита, при беглом анализе вы не заподозрите ее в злодеянии. Пакеты rootkit не ограничиваются только предоставлением доступа к выполне- нию команд от имени пользователя root. Они могут включать еще и различные вспомогательные утилиты, такие как анализаторы сетевого трафика (sniffer), программы управления файлами журналов, позволяющие чистить следы пре- бывания хакера в системе, и другие полезные для взломщика средства. Загрузив и установив набор rootkit, хакер закрепляется в системе и впослед- ствии сможет вернуться, даже если была закрыта уязвимость, через которую он изначально проник. Вы должны уметь находить и уничтожать пакеты rootkit, чтобы преградить путь хакеру, который может раньше вас узнать о следующей дыре в системе. Глава 14 424 Для облегчения задач администраторов добрыми людьми была разработана программа chkrootkit. Ее можно найти на сайте www.chkrootkit.org. На дан- ный момент она способна обнаружить более 60 известных пакетов rootkit. Таким образом, вы без особых усилий можете отыскать и уничтожить в сис- теме потайную дверь для хакера. Но , как говорится, на бога надейся, а сам не плошай. Готовыми наборами rootkit пользуются только начинающие хакеры или любители. Профессио- нальный взломщик хорошо знаком с программированием и создаст себе ин- струмент самостоятельно. Тем более что это не так уж сложно, достаточно знать особенности работы ОС Linux. Поэтому и вы должны научиться само- стоятельно находить и удалять rootkit. Определить появление rootkit-пакета вручную поможет сканирование портов. Чтобы воспользоваться потайной дверью, нужно открыть в системе порт, на котором rootkit ожидает соединения со стороны хакера. Взломщик подклю- чается к этому каналу и управляет системой. Для быстрого сканирования лучше всего подходит пакет nmap (www.insecure.org). Это один из самых быстрых сканеров под Linux с боль- шими возможностями. Необходимо запустить программу проверки всех 65 535 портов. Для этого нужно выполнить команду: nmap –p 1-65535 localhost Параметр –p позволяет задать диапазон портов. В данном случае установлен весь диапазон от 1 до 65 535. Помимо этого, может пригодиться один из следующих параметров: -sT — стандартное сканирование с установкой TCP-соединения, явля- ется самым медленным. Любая программа антисканирования увидит его (см. разд. 12.4). Если вы запускаете утилиту nmap от имени обычного пользователя , то по умолчанию будет использоваться этот метод; -sS — TCP SYN-сканирование. Если вы работаете с правами root, то по умолчанию установлен этот тип, как более быстрый и к тому же неопре- деляемый некоторыми программами антисканирования; -sF — TCP FIN-сканирование. В соответствии с RFC 793, если на порт направить пакет с установленным флагом FIN (используются для завер- шения соединения), и этот порт окажется закрытым, то сервер должен от- ветить пакетом, имеющим тип RST. ОС Linux действует по стандарту, и поэтому можно легко просканировать порты с помощью этого метода. Если пакет RST не получен, то порт открыт. А вот работа Windows далека от стандарта, и здесь результат непредсказуем; Советы хакера 425 -sX — TCP Xmas-сканирование. Метод похож на предыдущий, только по- мимо этого устанавливаются флаги URG и PUSH , указывающие на срочность данных ; -sN — TCP NULL-сканирование. На сервер направляются пустые пакеты, на которые он должен сообщить об ошибке; -I — Ident-сканирование; -sU — UDP-сканирование. Смысл сканирования в том, чтобы получить от сервера хоть какой-нибудь ответ . В зависимости от метода сканирования по положительному или отри- цательному ответу определяется, закрыт порт или открыт. Более быстрый способ получить открытые порты — это команды lsof (с па- раметром –i) или netstat , но их выполнение должно происходить локально, непосредственно с компьютера. Вторая директива будет эффективной только в том случае, если хакер в данный момент подключен к системе. Помимо rootkit вы должны проверить систему на наличие посторонних за- гружаемых модулей ядра. Для этого очень хорошо подходит утилита chkproc (входит в состав пакета chkrootkit). Но и это еще не все, chkrootkit включает в себя еще и утилиту ifpromisk , которая позволяет найти программу про- слушивания трафика. И напоследок нужно проверить список работающих процессов с помощью команды ps –aux , чтобы найти незнакомые процессы. При просмотре будьте внимательны . Вспомните пример с программой login, когда первая буква l заменялась цифрой 1. Увидев процесс 1ogin, быстрым взглядом можно ниче- го не заметить. Если объединить работу всех этих утилит в одно целое, то можно бу- дет получить новый пакет rootkit, о котором еще неизвестно фирме chkrootkit. После того как вы определили наличие файлов rootkit, вы должны оста- новить их работу и удалить из системы. Самое простое, если программа хакера не модифицировала никаких системных файлов. Если это про- изошло , то нужно переустановить все программы, которые изменил зло- умышленник . Легче всего это сделать в дистрибутивах на основе Red Hat, где поддерживается работа с RPM-пакетами. Тогда достаточно выполнить команду : rpm –U –force пакет.rpm В данном случае мы запрашиваем восстановление пакета пакет.rpm Глава 14 426 14.3. backdoor Если взломщик получил доступ к серверу, то чтобы оставаться незаметным, он устанавливает в системе программы backdoor (потайные двери). Такие программы чаще всего действуют следующим образом: на каком-либо порту открывается порт и программа ожидает подключения хакера ; когда соединение состоялось, то программа открывает для хакера команд- ную оболочку на этом порту, чтобы можно было выполнять директивы. Это вам ничего не напоминает? Да, троянские программы работают подоб- ным образом, но троянов подбрасывают как вирусы и ожидают, что админи- стратор сам их запустит, а backdoor взломщик закачивает на сервер и уста- навливает сам. Есть сходство и с программами rootkit. В настоящее время стирается грань между разными хакерскими утилитами. Одна программа может выполнять сразу несколько функций. Так, rootkit и backdoor уже давно соединяют в одно целое , хотя остаются еще и классические утилиты. Надо уточнить, что программы backdoor нельзя купить в ближайшем магази- не . Взломщики пишут их для собственного использования. Хакеры не любят раскрывать свои программы, потому что если они станут достоянием обще- ственности , то лазейки, через которые взломщик проникает в систему, за- кроют . И все же, на закрытых сайтах можно встретить некоторые из этих разработок Цель этой книги — создание безопасной системы, и я не буду рассматривать процесс создания и открытия потайных дверей. Мы будем обсуждать про- блему их поиска и уничтожения. Самый простой и быстрый способ найти чужую программу — просмотреть процессы , работающие в системе, и открытые порты. Как следует из опреде- ления , backdoor — это программа, которая ожидает подключения взломщика, а значит, должен присутствовать работающий процесс этой программы. Вы- полняем команду ps и смотрим, что сейчас работает в системе. Однако при этом надо быть внимательным и учитывать некоторые подводные камни. При просмотре процессов нужно убедиться, что файл программы ps не мо- дифицирован хакером. Так как исходные коды ОС Linux доступны, зло- умышленник может изменить программу ps, чтобы она не отображала про- цесс backdoor, и подбросить свой вариант в вашу систему. Доступность исходных кодов позволяет хакеру изменять и любые дру- гие программы. Например, может быть трансформирован демон telnetd, и, Советы хакера 427 помимо основных своих функций, программа будет играть роль потайного входа . Убедитесь, что исполняемые файлы всех работающих процессов не изменены К тому же, некоторые демоны могут работать с подгружаемыми модулями. Злоумышленник может написать и подключить свой модуль вместо или в дополнение к стандартным, и его определить уже сложнее, так как основ- ной процесс не модифицирован. При просмотре процессов будьте внимательны. Хакер может назвать свою утилиту telnetd, и тогда в вашей системе будет две программы с таким назва- нием . Одна будет системной, а другая — хакерская, которая выполня- ет функции backdoor. Будьте бдительны при просмотре списка открытых процессов Изменение исходных кодов — достаточно сложное занятие, и для этого нуж- но обладать хорошими знаниями в программировании, поэтому данный ме- тод мало распространен, хотя он и наиболее опасен. И все же, его нельзя сбрасывать со счетов, потому что никогда не знаешь, какова квалификация проникшего в систему взломщика. Если ваш сервер работает постоянно, то хакер может смело запускать свой процесс backdoor и уходить восвояси. Если сервер хоть иногда выключается, то злоумышленник должен позаботиться о том, чтобы после перезагрузки backdoor тоже запустился, иначе потайной вход в систему будет закрыт. По- этому обязательно проверьте все сценарии, отвечающие за загрузку сервисов, на предмет изменений. Эти сценарии находятся в директории /etc/rc.d/init.d. Сделать это может быть сложно, потому что в ОС Linux таких сценариев много . Но в любой из них хакер может добавить команды загрузки своей утилиты С недавних пор ядро Linux стало действительно модульным. Это удобно, по- тому что позволяет получить новые возможности, просто подгрузив необхо- димый блок. Если раньше для этого требовалась перекомпиляция ядра, то теперь достаточно выполнить несколько команд, и все готово. Как же взломщики используют ядро, чтобы спрятать свой процесс? Про- грамма ps (и подобные ей) для определения запущенных процессов исполь- зуют ядро. Именно оно знает, что работает в данный момент. Хакерами были написаны разнообразные модули, которые не дают ядру сообщить об опре- деленных процессах, поэтому администратор просто не увидит программу backdoor. Это только некоторые сложности, с которыми вы можете столкнуться при поиске backdoor просмотром списка запущенных процессов, выдаваемого Глава 14 428 программой ps. Именно поэтому нужно анализировать систему в поисках злонамеренных программ и другими способами. Итак , помимо запуска процесса, программа backdoor должна открыть какой- то порт и ожидать подключения со стороны хакера. Таким образом, мы должны контролировать и это. Самый быстрый способ определить сервисы, ожидающие подключения — это использовать команду netstat . Но так как эта программа входит в состав Linux, то ее исходные коды также могут быть изменены . А вот от сканера портов не скроешься, правда, для его работы не- обходимо больше времени. Но и от сканера портов backdoor может скрыться, точнее, он может вовсе не открывать портов. Лучший способ спрятать backdoor от сетевых анали- заторов — использовать при программировании Raw Sockets (сырые соке- ты ), как это делают снифферы. На сервере программа backdoor прослуши- вает весь трафик, и если видит пакеты, помеченные специальным образом, то выполняет инструкции, описанные в этом пакете. Хакеру только остает- ся направлять широковещательные или просто безымянные пакеты, имею- щие определенный идентификатор, чтобы сервер выполнял необходимые инструкции Утилита netstat и сканеры портов не могут определить снифферы, поэтому они тут бессильны. Однако для прослушивания трафика сетевая карта долж- на работать в специализированном режиме, который легко определяется, ес- ли просмотреть состояние сетевого интерфейса командой ifconfig Есть и другой способ найти такую программу backdoor: поступить по прави- лу "клин клином вышибают". Запускаем сниффер и просматриваем, что про- ходит через нашу сетевую карту. Если мы видим пакеты, которые отсылают закрытую информацию или пароли, то это может указывать на наличие в системе программы backdoor. От сниффера может скрыться только зашиф- рованный трафик. Основной недостаток такого метода — во время работы сниффера повыша- ется нагрузка на сервер. В этом случае все пакеты, которые проходят мимо сетевой карты, поднимаются до уровня ОС. Но самый лучший способ защиты от backdoor — хорошо настроенный сете- вой экран. Если в применяемой вами политике безопасности по умолчанию все запрещено, и разрешен только доступ к публичным ресурсам, то даже если сторонняя программа откроет какой-то порт, то подключиться к нему будет невозможно без изменения фильтров в сетевом экране. Следите за тем, чтобы никакие лишние записи в настройках Firewall не появлялись, и все му- чения хакера станут напрасными. |