Вскоре после того, как компания



Изъян MDAC RDS IIS 4.0

Вскоре после того, как компания Microsoft справилась с проблемой, вызванной программой iishack, работа которой приводила к переполнению буфера сервера IIS (это произошло в июне 1999 года), в июле ей пришлось столкнуться с другой проблемой, связанной с Web-сервером. Данная проблема была описана в бюллетене компании Microsoft, посвященном вопросам безопасности, еще в 1998 году, но стала известна широкой общественности лишь в последнее время. Этот изъян возникает из-за недостатка одного из компонентов Microsoft доступа к данным (MDAC — Microsoft Data Access Components) службы RDS (Remote Data Service), который позволяет взломщику запускать любые команды на уязвимом сервере.
Первопричина проблемы заключается в объекте DataFactory службы RDS. По умолчанию он позволяет передавать удаленные команды серверу I1S. В этом случае команды запускаются с правами эффективного пользователя этой службы, которым обычно является пользователь SYSTEM (внутренний пользователь, обладающий привилегиями администратора). Это означает, что взломщик может получить удаленный доступ с правами администратора к любому серверу в мире', у которого имеется такой изъян.
Для проверки этой концепции компания Rain.forest.puppy разработала свой сценарий на языке Perl (его можно загрузить с Web-узла компании Security Focus http://vww.securityfocus.com), посылающий запрос RDS в базу данных, которая служит в качестве образца и называется btcustmr.mdb. Целью запроса является запуск на сервере команды, вводимой пользователем.
Поиск уязвимых серверов в сети представляется простой задачей. Посмотрим, как можно обнаружить компоненты MDAC службы RDS. С помощью утилиты netcat и языка Perl можно просканировать подсети в поисках признаков уязвимого сервера — наличия динамически подключаемой библиотеки msadcs.dll. Если в результате обработки HTML-запроса будет получена строка appiication/x-varg, значит, высока вероятность того (хотя и не на 100%), что данная система уязвима. Ниже для примера приведен код на языке Perl, с помощью которого можно обнаружить данный изъян.

#!/usr/bin/perl
if ($|ARGV < 0) {
print "Ошибка в синтаксиме - попробуйте eщe pas.";
print ": mdac.pl 10.1.2.3-255";}
doit($ARGV[0]); foreach $item (@hosts)
{ portscan($item); }
close OUTFILE;
sub doit { $line = $_[0];


if ($line!=/#/) {
if ($line=~/-/) {
Stmp = split/-/, $line;
Ship = split//, $tmp[0];
@eip = split//, $tmp[lj;
} else
{
@bip = split//, $line;
@eip = split//, $line; }
$al = $bip[0];
$bl = $bip[l];
$cl = $bip[2];
$dl = $bip[3];
Snum = @eip; if ($num==l)
{ $a2 = $bip[0]
$b2 = $bip[l]
$c2 = $bip[2]
$d2 = $eip[0]
} elsif
($num==2)
{$a2 = $bip[0]
$b2 = $bip[l]
$c2 = $eip[0]
$d2 = $eip[l] }
elsif
($num==3)
{
$a2 = $bip[0]
$b2 = $eip[0]
$c2 = $eip[l]
$d2 = $eip[2]
} elsif
($num== )
{
$a2 = $eip[0]
$b2 '-= $eip[l]
$c2 = $eip[2]
$d2 = $eip[3] }
# Ha базк IP-адреса подсети (класс A, B, C)задаем
# корректные значения переменных.
check_end(); $aend=$a2;
# Создание массива.
while
($al < $aend)
( while ($bl < $bend)
{ while ($cl < $cend)
{ while ($dl < Sdend) {
push (@hosts, "$al.$bl.$cl.$dl">;
$dl+=l;
check_end();
}
$cl+=l;
$dl=0;
}
$bl+=l;
$cl=0;
}
$al+=l; $bl=0; } } }
sub portscan ( my $target = $_[0];
print "Сканируется порт $target."; local $/;
open(SCAN,"nc -vzn -w 2 $target 80 2»
&1I");
# Порт открыт
$result = <SCAN>;
if ($result=~/open/)
{
print "\tПорт 80 Ha $target открыт . \n";
print OUTFILE "порт 80 открыт\n";
open (HTTP, ">http.tmp");
print HTTP "GET /msadc/msadcs.dll HTTP/1.0\n\n";
close HTTP;
open(SCAN2, "type http.tmp I nc -nvv -w 2 $target 80 2>&1 I");
$result2 = <SCAN2>;
if (Sresult2=~/Microsoft-IIS4.07)
{
if ($result2=~/x-varg/){
print "
$target уязвима против атаки MDAC.";
print OUTFILE "$target
может быть уязвима против атаки &MDAC.";
}
}
close SCAN;
}
}
sub check_end
{
if (($al==$a2) &S ($bl==$b2) &
s ($cl==$c2)) {
$dend=$d2; }
else {
$dend=255; }
if (($al==$a2) &&
($bl==$b2)) {
$cend=$c2; }
else {
$cend=255; }
if ($al= =$a2)
{
$bend=$b2; - }
else {
$bend=255;
}
}

При использовании параметра -n команды netcat требуется, чтобы в командной строке явно указывался IP-адрес

Содержание раздела