Михаил Фленов СанктПетербург бхвпетербург 2010 удк 681 06 ббк 32. 973. 26018. 2 Ф69
Скачать 3.69 Mb.
|
14.4. Небезопасный NFS Технология NFS (Network File System, сетевая файловая система) была раз- работана компанией Sun Microsystems в 1989 году. Идея была великолепной. Любой пользователь может монтировать каталоги сервера к своей файловой системе и использовать их, как будто они находятся на компьютере клиента. Это очень удобно в сетях. Пользовательские каталоги могут находиться на сервере и подключаться к клиенту по мере надобности. Таким образом, все файлы будут храниться централизованно, а использоваться, как будто они находятся локально. Но , как я уже говорил, удобство и безопасность — несовместимые вещи, а NFS слишком удобна. В состав NFS входит утилита showmount , которая может отобразить, какие директории и какими пользователями подключены. Для администратора это неоценимая информация. Выполните команду showmount –a localhost . Вы увидите информацию о NFS на своем сервере в таком формате: All mount points on localhost: robert:/home/robert econom:/home/jhon buh:/home/andrey robert:/usr/local/etc econom:/usr/games Результат разделен на две колонки символом двоеточия. В первой находится имя компьютера, подключившего удаленный раздел, а во второй — путь на сервере к подключенному ресурсу. Подробную информацию видеть приятно, но и опасно, потому что команда может выполняться удаленно, а значит, любой хакер доберется с ее помощью до следующей информации: подключенные директории. В примере выше подсоединяются различные папки из раздела /home. Чаще всего их названия совпадают с именами пользователей , поэтому легко определить действительные имена пользо- вателей системы, не обращаясь к файлу /etc/passwd. С такой информацией хакеру проще будет подбирать пароли доступа; имена компьютеров в сети. Если вы потратили большие усилия на защиту своего DNS-сервера, то можете считать, что вы сделали это зря, если на каком -либо сервере установлена NFS. Один запрос показывает имена компьютеров в сети, пусть и не все, а только работающие с NFS, но и этого Глава 14 430 может быть достаточно для хакера. Кстати, ему не надо даже зондировать сеть с помощью ping-запросов, потому что и так видно действующие ком- пьютеры ; используемые программы, включая номер версии. Если пользователи монтируют каталоги с программами, то имена этих каталогов могут вы- глядеть как /usr/local/jail 1.0. Это только пример, но он показывает, что директории в Linux могут содержать в качестве имени название програм- мы и, самое главное, номер версии. В зависимости от того, какие открыты каталоги, хакер может получить на- много больше информации. Выходит, что утилиты NFS слишком болтливы, а этого нельзя допускать. Если вы решили использовать NFS, то позаботьтесь о том, чтобы она не был доступна из Интернета. Для этого необходимо запретить подключение к UDP- и TCP-порту 2049 извне. Эти функции может выполнить сетевой эк- ран . Но если хакер уже взломал какой-то компьютер в сети и получил воз- можность выполнять команды внутри сети, то защита сетевого экрана не по- может При настройке NFS в файле /etc/exports указываются экспортируемые файло- вые системы и права доступа к ним. Никогда не открывайте полный доступ ко всей системе, то есть в файле не должно быть строки: / rw Необходимо четко прописывать пути к каталогам, которые могут быть мон- тированы пользователями. Это значит, что если пользователи должны иметь возможность подключать домашние каталоги, то следующее разрешение также является неверным и опасным: /home rw В чем здесь опасность? Не все пользовательские каталоги должны монтиро- ваться удаленно. Например, если вы работаете под пользовательской учетной записью , но являетесь администратором, то в вашем каталоге могут быть программы , используемые для управления системой. Нельзя допустить, что- бы злоумышленник смог его увидеть (даже с правами только на чтение). Раз- решайте подключение только конкретным пользователям, которые действи- тельно монтируют свои файловые системы удаленно. Например: /home/Robert rw /home/FlenovM rw /home/Andrey rw Большинство специалистов по безопасности сходятся во мнении, что NFS не стоит использовать вообще. Если вы решили применить ее только для того, Советы хакера 431 чтобы программы были установлены централизованно, то следует победить свою лень и заняться их постановкой на каждый компьютер в отдельности. Если вам необходимо сделать документы общедоступными, чтобы пользова- тели могли работать совместно с одним каталогом, то можно рассмотреть вариант использования Samba (см. главу 6). Этот сервис менее болтлив и мо- жет решить ваши потребности в разделении каталогов сервера. 14.5. Определение взлома Для эффективной защиты сервера очень важно вовремя определить, что сер- вер был взломан. Чем раньше вы узнаете о проникновении в систему хакера, тем скорее сможете отреагировать и предотвратить печальные последствия. Помните , взломы бывают всегда и с любой системой, но вы должны уметь их раскрывать Как можно выявить хакера? Существует очень много методов, и мы рассмот- рим лишь наиболее интересные и эффективные. 4.5.1. Осведомлен , значит защищен Очень часто я использую чрезвычайно эффективный, но сложный в реализа- ции метод — информирование при запуске потенциально опасных программ. Сложность заключается в том, что надо уметь программировать под Linux хотя бы на каком-нибудь языке программирования. Лучше, если это будет С, но можно и Perl. В крайнем случае подойдет умение писать сценарии (команд- ные файлы). Итак , в чем заключается мой метод? Войдя в систему, хакер всегда огляды- вается и старается найти способ укрепиться в системе, чтобы оставаться дол- гое время незаметным для администратора. Для этого взломщик чаще всего выполняет команды who , su , cat и др. Ваша задача установить на них ловуш- ки . Например, можно изменить код программы su так, чтобы сразу после ее выполнения администратору направлялось письмо. Получение сообщения о том, что была выполнена опасная команда, если она запускалась не администратором, — хороший повод проверить систему на наличие в ней постороннего. Если вы не умеете программировать, можно обойтись и средствами самой ОС . Допустим, что вы хотите получать сообщения каждый раз, когда выпол- няется команда who . Взломщик часто выполняет такую директиву, когда вхо- дит в систему, чтобы узнать, есть ли там администратор. Определить место расположения программы можно командой: which who Глава 14 432 В результате вы должны увидеть путь типа /usr/bin/who. Для начала запоминаем права на файл, выполнив команду: ls –al /usr/bin/who У данной программы должны быть права –rwxr-xr-x , что соответствует чис- лу 755. Теперь необходимо переименовать файл /usr/bin/who в /usr/bin/system_who. Это можно сделать следующей командой: mv /usr/bin/who /usr/bin/system_who Меняем права доступа: chmod 755 /usr/bin/system_who Теперь , чтобы выполнить команду who , нужно использовать имя system_who Но переименованный файл может стать неисполняемым, поэтому второй командой мы восстанавливаем права. Затем создаем заглушку для программы who. Это будет файл с именем who, в директории /usr/bin. Когда хакер будет выполнять команду who, то будет запускаться наш файл. Для этого выполним команду: cat > /usr/bin/who Теперь все команды, которые будут вводиться с консоли, будут записываться в файл /usr/bin/who. Наберите две строки: /usr/bin/system_who id | mail –n –s attack root@FlenovM После этого нажмите сочетание клавиш Выполните команду who . Все вроде нормально, но если проверить почту, то в вашем почтовом ящике будет лежать новое письмо с заголовком "attack" (рис. 14.1), и в нем будут находиться параметры (все, что вернет команда id ) пользователя , выполнившего команду. Это из-за того, что запустилась не системная команда, а наш файл, который содержит две строки: /usr/bin/system_who — сначала запускаем системный файл who, который мы переименовали, чтобы взломщик ничего не заподозрил; id | mail –n –s attack root@FlenovM — выполняется команда id , и ре- зультат направляется с помощью почтовой программы mail в почтовый ящик root@FlenovM. Ключ –s задает заголовок письма. Ключ –n предот- вращает чтение файла /etc/mail.rc. Я рекомендую указывать только эти ат- рибуты , чтобы на экране ничего лишнего не появлялось, и взломщик ни- чего не заподозрил. Хакер не должен знать, что программа отправила администратору какое-то сообщение. Советы хакера 433 Рис . 14.1. Пример сообщения об атаке Таким образом, можно подменить все опасные программы, которые должны быть недоступны простым пользователям. Хакеры чаще всего не проверяют утилиты, которые запускают, а ведь угрозу можно увидеть, если выполнить команду: cat /usr/bin/who Вот тут и проявляется недостаток использования сценариев — их можно просмотреть . Программы, написанные на языке С и откомпилированные в исполняемый файл, при просмотре показывают абсолютно ничего не гово- рящий мусор. 4.5.2. Ловля на живца Администраторы очень любят оставлять приманки для хакеров, потому что они позволяют идентифицировать злоумышленника на начальном этапе. Эта технология даже получила название honeypot (горшок меда). Как это работает? В сети устанавливается один или несколько компьютеров, в которых изна- чально заложены ошибки конфигурирования или легкие для подбора пароли. Основная задача этого комплекса — отслеживание обращений извне и реги- страция любых взломов. Глава 14 434 На рис. 14.2 приведена схема классической honeypot-сети. От Интернета ее отделяет сетевой экран, за которым находятся публичные ресурсы и подстав- ные серверы/компьютеры (публичная сеть). Далее идет второй сетевой экран, который защищает и скрывает приватную сеть. Internet Public NET Firewall 1 Net card 1 Net card 2 Firewall 2 Net card 2 Net card 1 Private Net Рис . 14.2. Построение honeypot- сети Как только хакер попадает в капкан, администраторы начинают идентифика- цию и его поиск. Пока злоумышленник пытается проникнуть далее, в хорошо защищенную сеть, специалисты по безопасности уже успевают прийти к не- му домой и физически остановить нездоровое любопытство. Чтобы ваш капкан не ловил всех подряд и не давал ложных срабатываний, его защита должна быть достаточной, дабы сервер нельзя было сломать про- граммами , автоматизирующими поиск уязвимостей. Иначе количество еже- дневно пойманных в ловушку хакеров будет исчисляться сотнями, а то и бо- лее , ведь популярные ресурсы сканируют часто. Я настраиваю свои honeypot-серверы на максимальную безопасность, просто сетевой экран, который их защищает, пропускает практически любой трафик. Это позволяет решить сразу несколько потенциальных проблем: не вызывает подозрений у хакера. Слишком открытые серверы с дырявы- ми сервисами насторожат профессионала, и он не будет трогать такие компьютеры ; уменьшает количество срабатываний системы на каждого начинающего хакера , который случайно нашел программу для взлома; позволяет выявлять атаки, которые еще неизвестны специалистам по безопасности , и защищаться даже от них. Если сервер с правильными на- стройками взломан, значит, компьютеры за пределами второго сетевого экрана тоже уязвимы, но вы еще не знаете об этой лазейке или совершили ошибку в конфигурировании. Как только замечен взлом поддельного сервера, выполняются следующие шаги : анализируется уязвимость, через которую проник хакер. Найдя ошибку в конфигурировании или дырявый сервис, необходимо отыскать заплатку и установить ее на компьютеры защищенной сети, чтобы хакер после Советы хакера 435 взлома второго сетевого экрана не смог воспользоваться этой уязви- мостью ; выясняется источник угрозы, IP-адрес хакера и вся найденная информация сообщается в правоохранительные органы. Так как на honeypot-компьютерах сервисы не обрабатывают, а только эмули- руют реальные подключения пользователей, то для таких серверов нет необ- ходимости устанавливать мощное оборудование. Достаточно устаревшего железа , которое вы уже давно не используете. В любой организации кабинет администратора завален старыми системными блоками, которые лежат толь- ко как запасные части. Если у вас нет старых компьютеров, то в honeypot можно превратить и серве- ры , которые используются в качестве публичных. В принципе, каждый пуб- личный сервер и так должен содержать мощные системы журналирования и мониторинга, и от honeypot их должно отличать отсутствие заведомо от- крытых уязвимостей и легких паролей. Чтобы хакер ничего не заподозрил и обратил внимание на подставные ком- пьютеры , одной защиты мало. Необходимо, чтобы honeypot создавали види- мость действия и обрабатывали какой-либо трафик. Для этого могут быть написаны специальные утилиты, которые с определенным интервалом про- изводят соединения между подставными компьютерами, имитируя работу пользователей . Компьютер, который находится в сети и ничего не делает, вызовет подозрение, и его будет ломать только "чайник". 14.6. Тюнинг ОС Linux На протяжении всей книги мы говорили о безопасной и эффективной на- стройке ОС Linux и ее сервисов. В данном разделе подведем итог всему ска- занному ранее и рассмотрим несколько новых параметров, которые могут сделать систему еще быстрее и надежнее. Эти установки относятся к наибо- лее тонким, поэтому я оставил их напоследок. Мы уже говорили о том, что лучшим средством повысить безопасность и производительность является запуск только самого необходимого. От этого напрямую зависит использование памяти и нагрузка на процессор. После того как вы определились со списком загружаемых сервисов и сокра- тили их до минимума, необходимо позаботиться о настройке каждого из них с учетом целесообразности использования. Здесь опять вступает в дело ми- нимизация возможностей. Например, сервис Apache загружает множество различных модулей, абсолютно ненужных для большинства сайтов. Глава 14 436 Каждый лишний модуль — это очередной удар по производительности и безопасности. Поэтому их нужно отключить. Закончив с этим, переходим к более тонким настройкам. 14.6.1. Параметры ядра Для начала откроем конфигурационный файл /etc/sysctl.conf. В нем находят- ся параметры ядра. Пример файла можно увидеть в листинге 14.1. Листинг 14.1. Конфигурационный файл /etc/sysctl.conf # Kernel sysctl configuration file for Red Hat Linux # Конфигурационный файл ядра для Red Hat Linux # For binary values, 0 is disabled, 1 is enabled. # See sysctl(8) for more details. # Для бинарных значений 0 — это отключен, а 1 — включен. # Смотрите man sysctl для получения дополнительной информации # Controls IP packet forwarding # Контролирует переадресацию IP-пакетов net.ipv4.ip_forward = 0 # Controls source route verification # Контроль проверки маршрутизации от источника net.ipv4.conf.default.rp_filter = 1 kernel.sysrq = 1 kernel.core_uses_pid = 1 #net.ipv4.tcp_ecn = 0 kernel.grsecurity.fifo_restrictions = 1 kernel.grsecurity.linking_restrictions = 1 # audit some operations # аудит некоторых операций kernel.grsecurity.audit_mount = 1 Советы хакера 437 kernel.grsecurity.signal_logging = 1 #kernel.grsecurity.suid_logging = 1 kernel.grsecurity.timechange_logging = 1 kernel.grsecurity.forkfail_logging = 1 kernel.grsecurity.coredump = 1 # lock all security options # блокировка всех опций безопасности #kernel.grsecurity.grsec_lock = 1 Что представляют собой параметры, которые вы видите в этом файле? Попробуем разобраться на примере net.ipv4.tcp_ecn . На самом деле это путь к файлу относительно каталога /proc/sys, в котором все символы ко- сой черты заменены точками. В данном случае имеется в виду файл /proc/sys/net/ipv4/tcp_ecn. Выполните следующую команду, чтобы просмот- реть содержимое файла: cat /proc/sys/net/ipv4/tcp_ecn В результате на экране вы должны увидеть 0 или 1. Это и есть значение параметра Но корректировать файл вручную нет смысла. Для изменения лучше исполь- зовать команду: sysctl –w имя_параметра = значение С помощью этой же команды можно просматривать значение параметров ядра : sysctl имя_параметра Например , следующая директива отобразит значение параметра net.ipv4.tcp_ecn : sysctl net.ipv4.tcp_ecn В результате вы увидите то же значение, что и при просмотре файла /proc/sys/net/ipv4/tcp_ecn напрямую. Большинство параметров имеют логиче- ский тип, то есть могут быть равны 0 (отключено) или 1 (включено). Рассмотрим параметры, которые имеет смысл изменить, а если их нет в фай- ле , то добавить: net.ipv4.icmp_echo_ignore_broadcasts — игнорировать широковещатель- ные эхо-пакеты протокола ICMP (параметр включен); net.ipv4.icmp_echo_ignore_all — игнорировать все эхо-пакеты протокола ICMP (значение 1). Используйте этот параметр, если не хотите связываться Глава 14 438 с сетевым экраном. Запрет эхо-пакетов уменьшит трафик, хотя и незначи- тельно , и при этом сделает неэффективными любые атаки с помощью ping; net.ipv4.conf.*.accept_redirects — разрешить принимать перенаправ- ления маршрутизатора. В главе 4 мы говорили о том, что это небезопасно и может позволить хакеру обмануть маршрутизатор и прослушать трафик атакуемой машины; Вместо символа звездочка может быть любое имя директории. Дело в том, что в каталоге net/ipv4/conf находится несколько подкаталогов — по од- ному для каждого сетевого интерфейса. В вашей системе должно быть как минимум 4 директории со следующим распределением содержащейся в них информации: • all — конфигурационные файлы, которые влияют на все интерфейсы; • default — значения по умолчанию; • eth0 — конфигурационные файлы первой сетевой карты; • lo — конфигурационные файлы петлевого интерфейса loopback. Звездочка указывает на то, что параметр должен быть назначен всем интер- фейсам . В большинстве случаев достаточно заменить * именем директории all, но иногда приходится подставлять все существующие директории; net.ipv4.conf.*.secure_redirects — позволить принимать сообщения от шлюза по умолчанию о перенаправлении маршрутизатора. Параметр может быть включен, только если в вашей сети действительно более од- ного маршрутизатора, иначе лучше запретить; net.ipv4.conf.*.send_redirects — разрешить компьютеру, если он яв- ляется маршрутизатором, отправлять сообщения о перенаправлении мар- шрутизатора . Если в сети несколько маршрутизаторов, то параметр можно включить , чтобы распределить нагрузку между ними и не пытаться про- пускать весь трафик через основной шлюз; net.ipv4.conf.*.accept_source_route — позволить принимать пакеты с маршрутизацией от источника. В разд. 14.7.2 мы еще обсудим этот во- прос , а сейчас необходимо знать, что такие пакеты могут стать причиной обхода вашего сетевого экрана. Запретите этот параметр; net.ip_always_defrag — дефрагментировать все приходящие пакеты. Так уж повелось, что сетевой экран проверяет только первый пакет, а все ос- тальные считает разрешенными. Хакер может обойти сетевой экран, при- бегая к разбивке посылки на части (см. разд. 14.7.1). Если установить этот параметр , то все входящие пакеты будут дефрагментированы, и обход се- тевого экрана этим методом станет невозможным; Советы хакера 439 net.ipv4.ipfrag_low_thresh — определяет минимальный объем памяти, который выделяет ОС для сборки фрагментированных пакетов. Чем больше это значение, тем меньше будет манипуляций по выделению па- мяти . По умолчанию используется число 196 608. Слишком большое зна- чение отнимет лишнюю память и может привести к эффекту, при котором для обработки данных не хватит ресурсов сервера. Я бы оставил значение по умолчанию; net.ipv4.ipfrag_high_thresh — определяет максимальное количество памяти (по умолчанию 262 144), выделяемое для сборки фрагментирован- ных пакетов. Если значение превышено, то ОС начинает отбрасывать пакеты . Хакер может попытаться закидать сервер большим количеством мусорных сообщений, но сервер больше не будет реагировать на фраг- ментацию ; net.ipv4.ipfrag_time — определяет время хранения фрагментированных пакетов в кэше. По умолчанию используется значение 30 секунд. Это очень много, за это время хакер сможет забросать весь кэш. В случае ата- ки на систему следует понизить это значение до 20, а то и до 10 секунд; net.ipv4.tcp_syncookies — продолжая тему защиты от DoS, я рекомен- дую включить этот параметр, чтобы защититься от атаки SYN Flood, при которой на сервер направляется большое количество пакетов с запросом на соединение. Хакер устанавливает в пакетах ложный обратный адрес, и сервер ожидает соединения от несуществующих или ничего не подозре- вающих компьютеров. Таким образом, легко превышается максимально допустимое количество подключений. Параметров ядра очень много, и рассматривать все мы не будем. В принципе, всю необходимую информацию можно узнать из документации. |