foreva
06.02.2005, 19:39
Бал-маскарад или Обмануть хакера
Дмитрий Репин aka cmapuk[0nline]
Источник: "Компьютер Price", http://www.comprice.ru
Процесс взлома компьютерных систем показан во всевозможных средствах массовой информации в романтическом свете и разрекламирован как простой запуск "суперхакерских" программ и кликание кнопок типа "Next", "OK", etc. Исходя из такой информации можно сделать вывод, что слово "безопасность" никаким образом не относится к компьютерному миру, однако... В реальной жизни, как знают многие и еще многие догадываются, дело обстоит гораздо сложнее. Безусловно, без специальных программ-помощников не обойтись, но их использование - это КОДА всего произведения. Для того чтобы применить тот или иной эксплойт (Exploit, Xploit - исходный код программы, реже готовая программа, выполняющая воздействие на жертву, пользуясь "дырками"), надо найти бреши в системе, а это неразрывно связано со знанием того, на какой платформе и с каким программным обеспечением работает жертва. Именно процесс наблюдения, поиска и проверки ошибок занимает основную часть времени работы по взлому. Иногда эта часть может затянуться на месяцы. Сегодня мы поговорим о том, как процесс взлома "убить на корню", то есть на первом этапе - этапе сбора информации.
Лирическое отступление
Первой и основной задачей администратора является своевременное исправление ошибок в системе, что является единственным гарантом безопасности. Качество выполнения этой задачи напрямую зависит от добросовестности администратора. Почтовые рассылки производителей вашего программного обеспечения, а также "походы" на www.securityfocus.com помогут вовремя подлатать систему, что сразу снизит опасность быть "удачно" атакованными. На деле оказывается, что большая часть администраторов слишком халатно относится к своему "электронному подопечному" и не выполняет обычных профилактических работ, олицетворяя собой старую поговорку "Пока гром не грянет, мужик не перекрестится". Многие исходят из соображения "А кому мы нужны?". Может быть, у вас нет конкурентов, может быть, нет врагов, но множество "псевдохакеров" при появлении информации о новом "баге" начинают его проверять на всех, кто попадется под руку. Может, в следующий раз это будете вы...
Ложь во спасение. Этап 1
Итак, приступим к выполнению поставленной в начале статьи задачи. В качестве примера возьмем веб-сервер Apache 2.0.36 под управлением операционной системы Windows2000 Professional. Выбор конфигурации для примера не имеет никакого значения, так как главной нашей "головной болью" будет сокрытие информации о системе. Конечно, лучшим способом скрыть эту информацию является отключение от сети Интернет, локальной сети и сети электропитания вообще. Но мы, как говорится, пойдем другим путем.
Сперва займемся веб-сервером. Как хакер может определить его "марку"? Подключимся к серверу вручную (без браузера) с помощью программы telnet (в данном случае по протоколу HTTP) и запросим простейшую информацию - первую страницу сайта.
E:\Work\> telnet localhost 80
Подключились и делаем запрос (можно вместо GET отправить запрос HEAD, чтобы получить только заголовки)
GET / HTTP/1.0
User-Agent: Murzilla 3000 Platinum
Referer: http://www.necrosoft.com
Ответ сервера
HTTP/1.1 200 OK
Date: Sat, 07 Sep 2002 07:42:21 GMT
Server: Apache/2.0.36 (Win32) DAV/2
Accept-Ranges: bytes
Content-Length: 732
Connection: close
Content-Type: text/html; charset=WINDOWS-1251
Content-Language: ru
(Далее будет текст HTML-страницы)
Как можно заметить, в третьей строке ответа сервера находятся данные, сообщающие, что веб-сервер у нас Apache, а операционная система - Windows. Это самая первая информация, которую мы обязаны скрыть.
Для этого откроем файл ...path_to_Apache/conf/httpd.conf и найдем такую строку:
LoadModule headers_module modules/mod_headers.so
Если в начале строки стоит знак "#" (комментарий), то удаляем его. Эта строка подключает Apache-модуль mod_headers, что дает нам возможность переопределить заголовки, выдаваемые сервером в ответах на запросы. Теперь в любом разделе конфигурации сервера или виртуального хоста расположим вот такую строчку (можно сразу рядом с LoadModule):
Header add Server "Superbison Server 2002 Chinese Edition"
А теперь снова сделаем запрос к серверу (после внесения изменений в конфигурационный файл сервер требуется перезапустить).
E:\Work\> telnet localhost 80
HEAD / HTTP/1.0
User-Agent: Murzilla 3000 Platinum
Referer: http://www.necrosoft.com
HTTP/1.1 200 OK
Date: Sat, 07 Sep 2002 07:55:08 GMT
Server: Superbison Server 2002 Chinese Edition
Accept-Ranges: bytes
Content-Length: 732
Connection: close
Content-Type: text/html; charset=WINDOWS-1251
Content-Language: ru
Почувствовали разницу ;-) ? Конечно, такие названия серверов писать не стоит, так как это сразу покажет хакеру, что заголовки сервера изменены и налицо попытка скрыть информацию. Нам же не нужна "попытка", нам нужно сокрытие. Поэтому поставим реальный заголовок существующего сервера.
Server: Apache/1.3.20 (Unix) FrontPage/5.0.2.2510 PHP/4.2.2 mod_fastcgi/2.2.12 mod_ssl/2.8.4 OpenSSL/0.9.5a rus/PL30.5
Server: Microsoft-IIS/5.0
Server: Apache/1.3.17 (Unix) PHP/4.0.4pl1 rus/PL30.3
Server: Apache/1.3.26 (Unix) Resin/2.1.0
Server: AOLserver/3.4.2
Server: WebLogic 5.1.0 Service Pack 5 08/17/2000 07:21:55 #79895
Выбирайте любой на свой вкус.
Вторым пунктом в списке наших задач стоит сокрытие информации о программном обеспечении, работающем на сервере, то есть о CGI-программах. Серверные приложения можно писать практически на любом языке, даже на JavaScript и VBScript (технология Active Server Pages). Каждый тип cgi-программ имеет свое стандартное расширение (по умолчанию), которое легко можно переопределить. Вот основные из них
*.cgi - Perl, Cи, Pascal, и т.п., интерпретируемые системой
*.pl - Perl
*.php, *.php3, *.php4 - PHP
*.asp - ASP (см. выше)
*.shtml - страницы с директивами SSI
*.jsp - JSP (Java Server Pages)
и т.п.
Эти расширения служат только для того, чтобы "объяснить" серверу, что делать с файлом: запускать, обрабатывать или отдавать на обработку другой программе. Распознавание этих расширений задается в том же конфигурационном файле сервера. В связи с тем, что на нашем сервере должна быть "сплошная ложь", мы все эти расширения перепишем. Пример для расширения *.cgi.
AddHandler cgi-script .cgi
Эту строчку следует заменить примерно на такую:
AddHandler cgi-script .xhtml
Теперь все наши Perl-скрипты, скомпилированные (Си, Паскаль) программы, и т.п. для сервера будем называть как ИмяФайла.xhtml
На качестве их работы это никак не отразится, зато введет в заблуждение тех, кто захочет "проверить" на прочность сервер. Можно придумать что-нибудь "попроще", например *.java. Теперь, вместо поиска брешей в cgi-скриптах, злоумышленник будет перелопачивать мегабайты архивов BUGTRAQ'ов в поисках багов Java-машин и безуспешно пытаться применить юниксовые эксплойты к Windows 2000. Гарантированно могу сказать, что уже только эти меры отобьют весь энтузиазм у "псевдохакеров" через час максимум - это могут подтвердить логи сервера ;-). Вышеописанным способом можно переопределить все расширения файлов.
Следующим этапом в конфигурировании сервера будет установка страниц, посвященных ошибкам. Страницы, выдаваемые сервером при ошибках, например, при обращении к несуществующему файлу, тоже могут "засветить" установленный софт (см. рис.1). Кроме указания на "марку" сервера страницы ошибок имеют и кое-какой дизайн, который у всех серверов, естественно, разный. Переопределить "ошибочные страницы" можно несколькими способами:
ErrorDocument 404 "<h1>Нот фаунд и все такое</h1>"
Заменить своим текстом
ErrorDocument 404 /errors/404.html
Отправить на другую страницу (точнее, выдать другую)
ErrorDocument 404 "/cgi-bin/errors.pl?404"
Отправить на скрипт (лучший вариант, т.к. можно обрабатывать ошибки по-своему)
ErrorDocument 404 http://linux.org.ru/
Отправить вообще "куда-нибудь"
Самым удобным способом является второй, то есть выдача другой, специально подготовленной страницы. Но лучшим способом будет выполнение скрипта (третий способ). В этом случае можно своевременно обнаружить попытки атаки. К тому же данная установка поможет при публичном тестировании системы на "мертвые" или ошибочные ссылки. Данные настройки следует произвести для всех вариантов ошибок.
***ПРОДОЛЖЕНИЕ НИЖЕ***
Дмитрий Репин aka cmapuk[0nline]
Источник: "Компьютер Price", http://www.comprice.ru
Процесс взлома компьютерных систем показан во всевозможных средствах массовой информации в романтическом свете и разрекламирован как простой запуск "суперхакерских" программ и кликание кнопок типа "Next", "OK", etc. Исходя из такой информации можно сделать вывод, что слово "безопасность" никаким образом не относится к компьютерному миру, однако... В реальной жизни, как знают многие и еще многие догадываются, дело обстоит гораздо сложнее. Безусловно, без специальных программ-помощников не обойтись, но их использование - это КОДА всего произведения. Для того чтобы применить тот или иной эксплойт (Exploit, Xploit - исходный код программы, реже готовая программа, выполняющая воздействие на жертву, пользуясь "дырками"), надо найти бреши в системе, а это неразрывно связано со знанием того, на какой платформе и с каким программным обеспечением работает жертва. Именно процесс наблюдения, поиска и проверки ошибок занимает основную часть времени работы по взлому. Иногда эта часть может затянуться на месяцы. Сегодня мы поговорим о том, как процесс взлома "убить на корню", то есть на первом этапе - этапе сбора информации.
Лирическое отступление
Первой и основной задачей администратора является своевременное исправление ошибок в системе, что является единственным гарантом безопасности. Качество выполнения этой задачи напрямую зависит от добросовестности администратора. Почтовые рассылки производителей вашего программного обеспечения, а также "походы" на www.securityfocus.com помогут вовремя подлатать систему, что сразу снизит опасность быть "удачно" атакованными. На деле оказывается, что большая часть администраторов слишком халатно относится к своему "электронному подопечному" и не выполняет обычных профилактических работ, олицетворяя собой старую поговорку "Пока гром не грянет, мужик не перекрестится". Многие исходят из соображения "А кому мы нужны?". Может быть, у вас нет конкурентов, может быть, нет врагов, но множество "псевдохакеров" при появлении информации о новом "баге" начинают его проверять на всех, кто попадется под руку. Может, в следующий раз это будете вы...
Ложь во спасение. Этап 1
Итак, приступим к выполнению поставленной в начале статьи задачи. В качестве примера возьмем веб-сервер Apache 2.0.36 под управлением операционной системы Windows2000 Professional. Выбор конфигурации для примера не имеет никакого значения, так как главной нашей "головной болью" будет сокрытие информации о системе. Конечно, лучшим способом скрыть эту информацию является отключение от сети Интернет, локальной сети и сети электропитания вообще. Но мы, как говорится, пойдем другим путем.
Сперва займемся веб-сервером. Как хакер может определить его "марку"? Подключимся к серверу вручную (без браузера) с помощью программы telnet (в данном случае по протоколу HTTP) и запросим простейшую информацию - первую страницу сайта.
E:\Work\> telnet localhost 80
Подключились и делаем запрос (можно вместо GET отправить запрос HEAD, чтобы получить только заголовки)
GET / HTTP/1.0
User-Agent: Murzilla 3000 Platinum
Referer: http://www.necrosoft.com
Ответ сервера
HTTP/1.1 200 OK
Date: Sat, 07 Sep 2002 07:42:21 GMT
Server: Apache/2.0.36 (Win32) DAV/2
Accept-Ranges: bytes
Content-Length: 732
Connection: close
Content-Type: text/html; charset=WINDOWS-1251
Content-Language: ru
(Далее будет текст HTML-страницы)
Как можно заметить, в третьей строке ответа сервера находятся данные, сообщающие, что веб-сервер у нас Apache, а операционная система - Windows. Это самая первая информация, которую мы обязаны скрыть.
Для этого откроем файл ...path_to_Apache/conf/httpd.conf и найдем такую строку:
LoadModule headers_module modules/mod_headers.so
Если в начале строки стоит знак "#" (комментарий), то удаляем его. Эта строка подключает Apache-модуль mod_headers, что дает нам возможность переопределить заголовки, выдаваемые сервером в ответах на запросы. Теперь в любом разделе конфигурации сервера или виртуального хоста расположим вот такую строчку (можно сразу рядом с LoadModule):
Header add Server "Superbison Server 2002 Chinese Edition"
А теперь снова сделаем запрос к серверу (после внесения изменений в конфигурационный файл сервер требуется перезапустить).
E:\Work\> telnet localhost 80
HEAD / HTTP/1.0
User-Agent: Murzilla 3000 Platinum
Referer: http://www.necrosoft.com
HTTP/1.1 200 OK
Date: Sat, 07 Sep 2002 07:55:08 GMT
Server: Superbison Server 2002 Chinese Edition
Accept-Ranges: bytes
Content-Length: 732
Connection: close
Content-Type: text/html; charset=WINDOWS-1251
Content-Language: ru
Почувствовали разницу ;-) ? Конечно, такие названия серверов писать не стоит, так как это сразу покажет хакеру, что заголовки сервера изменены и налицо попытка скрыть информацию. Нам же не нужна "попытка", нам нужно сокрытие. Поэтому поставим реальный заголовок существующего сервера.
Server: Apache/1.3.20 (Unix) FrontPage/5.0.2.2510 PHP/4.2.2 mod_fastcgi/2.2.12 mod_ssl/2.8.4 OpenSSL/0.9.5a rus/PL30.5
Server: Microsoft-IIS/5.0
Server: Apache/1.3.17 (Unix) PHP/4.0.4pl1 rus/PL30.3
Server: Apache/1.3.26 (Unix) Resin/2.1.0
Server: AOLserver/3.4.2
Server: WebLogic 5.1.0 Service Pack 5 08/17/2000 07:21:55 #79895
Выбирайте любой на свой вкус.
Вторым пунктом в списке наших задач стоит сокрытие информации о программном обеспечении, работающем на сервере, то есть о CGI-программах. Серверные приложения можно писать практически на любом языке, даже на JavaScript и VBScript (технология Active Server Pages). Каждый тип cgi-программ имеет свое стандартное расширение (по умолчанию), которое легко можно переопределить. Вот основные из них
*.cgi - Perl, Cи, Pascal, и т.п., интерпретируемые системой
*.pl - Perl
*.php, *.php3, *.php4 - PHP
*.asp - ASP (см. выше)
*.shtml - страницы с директивами SSI
*.jsp - JSP (Java Server Pages)
и т.п.
Эти расширения служат только для того, чтобы "объяснить" серверу, что делать с файлом: запускать, обрабатывать или отдавать на обработку другой программе. Распознавание этих расширений задается в том же конфигурационном файле сервера. В связи с тем, что на нашем сервере должна быть "сплошная ложь", мы все эти расширения перепишем. Пример для расширения *.cgi.
AddHandler cgi-script .cgi
Эту строчку следует заменить примерно на такую:
AddHandler cgi-script .xhtml
Теперь все наши Perl-скрипты, скомпилированные (Си, Паскаль) программы, и т.п. для сервера будем называть как ИмяФайла.xhtml
На качестве их работы это никак не отразится, зато введет в заблуждение тех, кто захочет "проверить" на прочность сервер. Можно придумать что-нибудь "попроще", например *.java. Теперь, вместо поиска брешей в cgi-скриптах, злоумышленник будет перелопачивать мегабайты архивов BUGTRAQ'ов в поисках багов Java-машин и безуспешно пытаться применить юниксовые эксплойты к Windows 2000. Гарантированно могу сказать, что уже только эти меры отобьют весь энтузиазм у "псевдохакеров" через час максимум - это могут подтвердить логи сервера ;-). Вышеописанным способом можно переопределить все расширения файлов.
Следующим этапом в конфигурировании сервера будет установка страниц, посвященных ошибкам. Страницы, выдаваемые сервером при ошибках, например, при обращении к несуществующему файлу, тоже могут "засветить" установленный софт (см. рис.1). Кроме указания на "марку" сервера страницы ошибок имеют и кое-какой дизайн, который у всех серверов, естественно, разный. Переопределить "ошибочные страницы" можно несколькими способами:
ErrorDocument 404 "<h1>Нот фаунд и все такое</h1>"
Заменить своим текстом
ErrorDocument 404 /errors/404.html
Отправить на другую страницу (точнее, выдать другую)
ErrorDocument 404 "/cgi-bin/errors.pl?404"
Отправить на скрипт (лучший вариант, т.к. можно обрабатывать ошибки по-своему)
ErrorDocument 404 http://linux.org.ru/
Отправить вообще "куда-нибудь"
Самым удобным способом является второй, то есть выдача другой, специально подготовленной страницы. Но лучшим способом будет выполнение скрипта (третий способ). В этом случае можно своевременно обнаружить попытки атаки. К тому же данная установка поможет при публичном тестировании системы на "мертвые" или ошибочные ссылки. Данные настройки следует произвести для всех вариантов ошибок.
***ПРОДОЛЖЕНИЕ НИЖЕ***