Еще одной "находкой для шпиона" могут быть, как это ни смешно звучит, иконки. Да, именно иконки. Те, которые отображаются рядом с именами файлов и директорий, когда в какой-либо директории нет индексного файла и при этом в настройках предусмотрен просмотр директорий (см. рис.2). Для того чтобы исправить эту "ошибку", нам нужно либо запретить просмотр директорий (что предпочтительнее), либо заменить все иконки на иконки другого сервера (который мы выбрали в качестве "маскарадного костюма"). Иконки определяются следующими директивами:
AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip .rar .ace
AddIcon /icons/a.gif .ps .ai .eps
AddIcon /icons/layout.gif .html .shtml .htm .pdf
И так далее...
Такой вариант решения проблемы - лишние телодвижения, увеличивающие и без того высокую энтропию нашей несчастной Вселенной. Поэтому мы выбираем другой способ - запрещаем просмотр директорий (эта возможность даже принципиально не нужна). Для этого в разделе конфигурационного файла, описывающем корневую директорию нашего сервера, внесем коррективы:
<Directory "D:/WWW/WWW-80">
Options FollowSymLinks Includes ExecCGI Indexes
# В Options нужно убрать параметр Indexes
AllowOverride None
Order allow,deny
Allow from all
</Directory>
Вот и все решение проблемы иконок (что гораздо проще их переделки ;-)). В результате этих изменений, при обращении к директории, не содержащей индексного файла, пользователь увидит сообщение об ошибке 403 (рис. 3).
Вообще, к конфигурированию сервера Apache можно подойти творчески. В комплекте сервера имеется множество полезных модулей. С помощью mod_env, mod_headers, mod_setenvif и т.п. можно настроить окружение как вам заблагорассудится. С помощью таких модулей, как mod_cgi, mod_perl, mod_rewrite, можно не только уменьшить нагрузку на сервер, но и создать мощную систему анализа подключений и предупреждения нападений.
Ложь во спасение. Этап 2
Кроме обычного веб-сервера часто на сервере установлено множество других программных продуктов, например FTP-сервер, почтовые SMTP, POP3, IMAP сервера, Secure Shell (ssh) и многие другие. У каждого такого сервера есть так называемый "баннер" - приветствие, выдающееся клиенту при подключении. Естественно, в этом приветствии содержится информация, указывающая на "марку" сервера. Содержание таких баннеров можно изменять в настройках сервера. Эта возможность оказывается нам очень кстати.
Вот пример баннера:
(C:\)
cmapuk@home]# telnet ftp11. zzzzzzzzzzz.ru 21 (подключаемся)
...
20 ftp11 FTP server (UNIX(r) System V Release 4.0) ready.
Далее, с помощью команды SYST можно узнать дополнительную информацию:
SYST
215 UNIX Type: L8 Version SunOS
Все эти "признаки" ОС необходимо маскировать.
Ложь во спасение. Этап 3
Как известно, самым эффективным способом защиты является нападение. В нашем случае нападение будет представлено в виде провокации, что тоже является одним из методов ведения войны.
В качестве наживки воспользуемся фиктивным FTP-сервером, функции которого будут совершенно отличными от функций настоящего FTP-сервера. Наш сервер должен будет принимать подключения, выдавать фальшивый баннер, причем баннер какого-нибудь "дырявейшего" реального сервера. Кроме того, сервер должен будет регистрировать и тщательно логировать все действия подключившегося хоста. Для достоверности, наш сервер будет обрабатывать несколько определенных протоколов FTP-команд. В их числе будут USER и PASS, после которых сервер сообщит об ошибке авторизации; также используем команду SYST, описанную выше. Пример такого лже-FTP-сервера:
#!/usr/bin/perl
use Socket;
use POSIX qw(sys_wait_h);
$paddr = sockaddr_in(21, INADDR_ANY);
socket(SERVER, PF_INET, SOCK_STREAM, getprotobyname('tcp')) or die "Socket error: $!";
bind(SERVER, $paddr) or die "Bind error: $!";
setsockopt(SERVER, SOL_SOCKET, SO_REUSEADDR, 1);
listen(SERVER, SOMAXCONN) or die "Listen error: $!";
$banner="220 ftp11 FTP server (UNIX(r) System V Release 4.0) ready.";
sub rea {
1 until (-1 == waitpid(-1, WNOHANG));
$SIG{CHLD} = \&rea;
}
sub killer {
print STDERR "Shutdown!";
$SIG{KILL} = \&killer;
exit;
}
$SIG{CHLD} = \&rea;
$SIG{KILL} = \&killer;
while ($hacker_paddr = accept(CLIENT, SERVER)){
next if $pid = fork;
die "Fork error: $!" unless defined $pid;
close(SERVER);
open(LOG,">>/home/ftpfake/connection.log");
print LOG time."\t";
print LOG join("\t",sockaddr_in($hacker_paddr))."\n";
close(LOG);
select CLIENT;
$|=1;
print CLIENT "$banner\r\n";
while(<CLIENT>){
if(/^user (.+?)/i){
local $u=$1;
chomp($u);
if($u=~/^anonymous$/i){
print CLIENT "331 password required for $u.\r\n";
}else{
print CLIENT "331 password required for $u.\r\n";
local $line=<CLIENT>;
if($line !~ /^pass /i){
print CLIENT "530 login incorrect.\r\n";
}else{
print CLIENT "530 please send your password.\r\n";
}
}
}elsif(/^syst /i){
print CLIENT "215 UNIX Type: L8 Version SunOS\r\n";
}elsif(/^noop$/i){
print CLIENT "200 OK\r\n";
}elsif(/^help$/i){
print CLIENT "214 take a look at ftp://ftp.rfc-editor.org/in-notes/rfc959.txt\r\n";
}elsif(/^quit/){
print CLIENT "Bye!\r\n";
close(CLIENT);
select(STDOUT);
}else{
print CLIENT "500 command not understood\r\n";
}
}
} continue {
close(CLIENT);
}
С помощью такой "FTP-провокации" можно сбить с толку многих злоумышленников. А кроме того, собрать о них полезную информацию, которую можно применить против них самих. В самом простом случае можно "нюкнуть" по тому адресу, с которого пришел запрос.
Ложь во спасение. Этап 4
С серверами теперь все ясно, и вроде бы пора заканчивать с "враньем", однако... Операционные системы имеют такие внешние особенности, как наличие открытых стандартных портов (в целях безопасности следует относиться серьезно к настройкам операционной системы и, по возможности, закрыть все неиспользуемые сервисы). Это явление может нам помочь. Для начала следует почитать документацию о той системе, под которую мы собираемся маскироваться, и узнать о том, какие сервисы обычно присутствуют в данной системе (а также их версии). После этого можно создать несколько псевдосерверов, наподобие вышеописанного, и "навесить" на соответствующие.
Эта идея не нова. Уже давно существуют подобные программные продукты, которые таким способом "превращают" одну систему в другую. Вот несколько примеров:
IPtrap (
http://www.jedi.claranet.fr/) прослушивает несколько TCP-портов, изображая поддельные сервисы (X11, NetBIOS, DNS и т.п). Когда удаленный клиент соединяется с одним из этих портов, его IP-адрес будет залогирован. Запускается вместе с IPTables и IPChains, но можно запустить и любой внешний сценарий (поддерживает IPv6).
Tiny Honeypot (
http://freshmeat.net/redir//31309/ur...p-0.4.3.tar.gz). Программа-ловушка (что следует из ее названия), основанная на iptables редиректах и xinetd. Tiny Honeypot прослушивает каждый TCP-порт, не используемый в данный момент, регистрирует все подключения и изображает обратную связь со злоумышленником, вводя таким образом в заблуждение большинство известных автоанализаторов, сканеров.
Также может оказаться полезной программа, подобная Anti-Hack.
Anti-Hack (
http://www.networkingfiles.com/Firew...ckdownload.htm) - это система, контролирующая использование портов. Программа способна наблюдать одновременно за 125 портами. Anti-Hack детально логирует попытки подключения и к тому же отправляет злоумышленнику сообщение о том, что "вас снимает скрытая камера!".
Подобного программного обеспечения в Сети можно найти множество. От простых утилит до сложных систем. С помощью такого программного обеспечения вы сможете защититься от подавляющего большинства хакеров. Кроме того, "обследование" вашей системы злоумышленником может быть вовремя зафиксировано, а это 90% вашей безопасности. Однако все вышеописанные меры не спасут вас от продвинутых хакеров...
Отпечатки пальцев стерлись?
"Что делать?" - процитируете вы классика. Сделать еще много чего можно, но для начала стоит рассказать, почему предыдущий раздел закончен так пессимистично.
Проблема "недостандартизации" в компьютерном мире встречается на каждом шагу. Большинство производителей программного обеспечения (будь то броузер или операционная система) при разработке "укладываются" в стандарты и общепринятые нормы лишь отчасти. Это утверждение можно смело отнести к реализации стека TCP/IP в операционных системах. С помощью низкоуровневого исследования неизвестной удаленной системы можно сделать выводы об установленной оперционной системе. Итак, методом проб, ошибок и исключений злоумышленник может определить не только название ОС, но и ее версию.
***ПРОДОЛЖЕНИЕ НИЖЕ***