Опубликован: 31.07.2006 | Уровень: специалист | Доступ: свободно
Лекция 14:

Безопасность UNIX

Смешанный режим

Интерфейс находится в смешанном режиме, когда в системе работает сниффер (сетевой анализатор пакетов). Сниффер переводит интерфейс в смешанный режим; при этом происходит фиксирование всей информации, проходящей через канал связи. Если при работе интерфейса в данном режиме выполнить команда ifconfig -a, то появится сообщение о том, что интерфейс находится в состоянии PROMISC (признак того, что работает анализатор пакетов). Если сниффер запущен не администратором системы, необходимо провести исследование причин этих обстоятельств.

Примечание

Solaris не выдает соответствующего отчета о том, что интерфейс находится в смешанном режиме. Причиной этому является ошибка в программном обеспечении ядра. Чтобы корректным образом проверить, находится ли интерфейс Solaris в смешанном режиме, необходимо использовать команду ifstatus, доступную по адресу ftp://ftp.cerias.purdue.edu/pub/tools/unix/sysutils/iftatus/.

netstat

Программа netstat используется для выяснения того, какие сетевые соединения находятся в активном состоянии в системе Unix. Команду следует использовать следующим образом: netstat -an. Аргумент "n" сообщает netstat о том, что обработка IP-адресов не требуется.

#netstat -an
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address 	Foreign Address 		State
tcp 	0 	0 0.0.0.0:10000 		0.0.0.0:* 				LISTEN
tcp 	0 	0 0.0.0.0:25 			0.0.0.0:* 				LISTEN
tcp 	0 	0 0.0.0.0:515 			0.0.0.0:*  				LISTEN
tcp 	0 	0 0.0.0.0:98 			0.0.0.0:*  				LISTEN
tcp 	0 	0 0.0.0.0:113 			0.0.0.0:*  				LISTEN
tcp 	0 	0 0.0.0.0:79 			0.0.0.0:*  				LISTEN
tcp 	0 	0 0.0.0.0:513 			0.0.0.0:*  				LISTEN
tcp 	0 	0 0.0.0.0:514 			0.0.0.0:*  				LISTEN
tcp 	0 	0 0.0.0.0:23 			0.0.0.0:*  				LISTEN
tcp 	0 	0 0.0.0.0:21 			0.0.0.0:*  				LISTEN
tcp 	0 	0 0.0.0.0:111 			0.0.0.0:*  				LISTEN
udp 	0 	0 0.0.0.0:10000 		0.0.0.0:*
udp 	0 	0 0.0.0.0:518 			0.0.0.0:*
udp 	0 	0 0.0.0.0:517 			0.0.0.0:*
udp 	0 	0 0.0.0.0:111 			0.0.0.0:*
raw 	0 	0 0.0.0.0:1 			0.0.0.0:*  				
raw 	0 	0 0.0.0.0:6 			0.0.0.0:*
Листинг 14.1.

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

Адреса, отображаемые в столбце локальных адресов, заканчиваются номером локального порта (число после столбца). Этот номер порта используется для определения того, является ли соединение входящим или исходящим. Например, если номер локального порта 23, то это входящее подключение к демону telnet. Если номер локального порта равен 1035, а номер внешнего порта - 23, то это исходящее соединение telnet.

lsof

Одна из проблем, связанных с программой netstat, заключается в том, что данная команда не сообщает, какой процесс поддерживает открытое состояние порта. Поиск процесса, связанного с определенным портом, может стать очень трудной задачей. Однако существует программа под названием lsof (http://ftp.cerias.purdue.edu/pub/tools/unix/sysutil/Isof/), которая предоставляет такую информацию. Сразу после установки программы выполните команду lsof -i, как показано ниже:

#lsof -i
COMMAND 	PID 	USER 	FD 	TYPE	DEVICE SIZE     NODE NAME
portmap 	311 	root 	4u 	IPv4 	301 		UDP 	*:sunrpc
portmap 	311 	root 	5u 	IPv4 	302 		TCP 	*:sunrpc (LISTEN)
inetd 		439 	root 	5u 	IPv4 	427 	TCP 	*:ftp (LISTEN)
inetd 		439 	root 	6u 	IPv4 	428 	TCP 	*:telnet (LISTEN)
inetd 		439 	root 	7u 	IPv4 	429 	TCP 	*:shell (LISTEN)
inetd 		439 	root 	9u 	IPv4 	430 	TCP 	*:login (LISTEN)
inetd 		439 	root 	10u 	IPv4 	431 	UDP 	*:talk
inetd 		439 	root 	11u 	IPv4 	432 	UDP 	*:ntalk
inetd 		439 	root 	12u 	IPv4 	433 	TCP 	*:finger (LISTEN)
inetd 		439 	root 	13u 	IPv4 	434 	TCP 	*:auth (LISTEN)
inetd 		439 	root 	14u 	IPv4 	435  	TCP 	*:linuxconf (LISTEN)
lpd 		455 	root 	6u 	IPv4 	457  	TCP 	*:printer (LISTEN)
sendmail 	494 	root 	4u 	IPv4 	495  		TCP 	*:smtp (LISTEN)
miniserv. 	578 	root 	4u 	IPv4 	567  		TCP 	*:10000 (LISTEN)
miniserv. 	578 	root 	5u 	IPv4 	568  		UDP 	*:10000
Листинг 14.2.

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

Примечание

lsof заменяет номер порта в столбце справа именем порта, если оно присутствует в файле /etc/services.

ps

Администратор также должен изучать результаты выполнения команды ps. Эта программа выводит все активные процессы, имеющиеся в системе, что необходимо при поиске снифферов, так как сниффер может не отображаться в lsof или в netstat. В большинстве систем выполнение команды ps -ef выводит перечень процессов в системе. В тех версиях Unix, где эта команда не работает, следует выполнить команду ps -aux. Результаты выполнения данной команды показаны ниже:

#ps -ef
UID 	PID 	PPID 	C 	STIME 	TTY 	TIME 	CMD
root 	1 	0 	0 	13:09 	? 	00:00:04 	init
root 	2 	1 	0 	13:09 	? 	00:00:00 	[kflushd]
root 	3 	1 	0 	13:09 	? 	00:00:00 	[kupdate]
root 	4 	1 	0 	13:09 	? 	00:00:00 	[kpiod]
root 	5 	1 	0 	13:09 	? 	00:00:00 	[kswapd]
root 	6 	1 	0 	13:09 	? 	00:00:00 	[mdrecoveryd]
bin 	3 11 	1 	0 	13:09 	? 	00:00:00 	portmap
root 	327 	1 	0 	13:10 	? 	00:00:00 	/usr/sbin/apmd -p 10 -w 5 -W
root 	380 	1 	0 	13:10 	? 	00:00:00 	syslogd -m 0
root 	391 	1 	0 	13:10 	? 	00:00:00 	klogd
daemon 	407 	1 	0 	13:10 	? 	00:00:00 	/usr/sbin/atd
root 	423 	1 	0 	13:10 	? 	00:00:00 	crond
root 	439 	1 	0 	13:10 	? 	00:00:00 	inetd
root 	455 	1 	0 	13:10 	? 	00:00:00 	lpd
root 	494 	1 	0 	13:10 	? 	00:00:00 	sendmail: accepting connections
root 	511 	1 	0 	13:10 	? 	00:00:00 	gpm -t ps/2
xfs 	528 	1 	0 	13:10 	? 	00:00:00 	xfs -droppriv -daemon -port -1
root 	570 	1 	0 	13:10 	tty1 	00:00:00 	login - root
root 	571 	1 	0 	13:10 	tty2 	00:00:00 	/sbin/mingetty tty2
root 	572 	1 	0 	13:10 	tty3 	00:00:00 	/sbin/mingetty tty3
root 	573 	1 	0 	13:10 	tty4 	00:00:00 	/sbin/mingetty tty4
root 	574 	1 	0 	13:10 	tty5 	00:00:00 	/sbin/mingetty tty5
root 	575 	1 	0 	13:10 	tty6 	00:00:00 	/sbin/mingetty tty6
root 	578 	1 	0 	13:10 	? 	00:00:00 	perl /usr/libexec/webmin/miniser
root 	579 	570 	0 	13:10 	tty1 	00:00:00 	-bash
root 	621 	579 	0 	13:17 	tty1 	00:00:00 	ps -ef

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

Измененные файлы

Когда злоумышленник успешно проникает в систему, он может попытаться изменить системные файлы для обеспечения продолжительного доступа к системе. Файлы, передаваемые в систему, обычно называются "rootkit", так как позволяют злоумышленнику осуществить доступ через корневую (root) учетную запись. В дополнение к таким программам, как снифферы, rootkit может содержать двоичные замещения для следующих файлов:

ftpd	passwd	
inetd	ps	
login	ssh	
netstat	telnetd

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

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

Совет

По адресу http://www.chkrootkit.org/ можно найти утилиту, которая помогает в проверке наличия в системе rootkit-ов.

Нияз Сабиров
Нияз Сабиров

Здравствуйте. А уточните, пожалуйста, по какой причине стоимость изменилась? Была стоимость в 1 рубль, стала в 9900 рублей.

Елена Сапегова
Елена Сапегова

для получения диплома нужно ли кроме теоретической части еще и практическую делать? написание самого диплома требуется?

Евгений Рогонков
Евгений Рогонков
Россия, Гремячево, Гремячевская СОШ, 2008