08.07.2005

«ащита Web-сервисов с использованием mod_security

Web-сервисы все чаще станов€тс€ неотъемлемой частью Web-приложений нового поколени€. » они также у€звимы к атакам. ѕрирода таких атак точно така€ же, как и дл€ обычных Web-приложений, однако принцип действий разный. Ёти атаки могут привести к утечке информации; далее, они способствуют удаленному выполнению команд. »спользу€ WSDL, хакер может определить точку доступа и доступные интерфейсы Web-сервисов. »нтерфейсы эти принимают данные с использованием SOAP по HTTP/HTTPS и без хорошей защиты на уровне исходного кода могут быть взломаны. mod_security работает как Web-модуль сервера Apache, идеальный дл€ защиты Web-сервисов против атак, которые также включают специально обработанные POST запросы, содержащие SOAP конверты.

јвтор Shreeraj Shah

09 июн€ 2005

Web-сервисы все чаще станов€тс€ неотъемлемой частью Web-приложений нового поколени€. » они также у€звимы к атакам. ѕрирода таких атак точно така€ же, как и дл€ обычных Web-приложений, однако принцип действий разный. Ёти атаки могут привести к утечке информации; далее, они способствуют удаленному выполнению команд. »спользу€ WSDL, хакер может определить точку доступа и доступные интерфейсы Web-сервисов. »нтерфейсы эти принимают данные с использованием SOAP по HTTP/HTTPS и без хорошей защиты на уровне исходного кода могут быть взломаны. mod_security работает как Web-модуль сервера Apache, идеальный дл€ защиты Web-сервисов против атак, которые также включают специально обработанные POST запросы, содержащие SOAP конверты.

ѕроблемный ƒомен

ƒл€ атаки Web-сервисов существует четыре основных направлени€:

  • »нъекци€ в буфер с непосто€нным размером
  • »нъекци€ метасимвола
  • SQL инъекци€
  • SOAP раскрытие дефектного кода

ќбычно конфигурации межсетевых экранов беспреп€тственно пропускают вход€щий HTTP/HTTPS трафик.  ажда€ из вышеуказанных атак, проще говор€, представл€ет собой посылку специально обработанного трафика, выгл€д€щего как обычный трафик, поэтому он и проходит через межсетевой экран. ¬ этой статье будут описаны пути и средства разделени€ легального и злоумышленного HTTP/HTTPS трафика, и, в дальнейшем, блокировки злоумышленного. ¬ыполнение этих действий поможет резко снизить веро€тность успешного проведени€ атаки через 80/443 порты.

 аково же решение?

–ешений на самом деле очень много, начина€ с установки дополнительных проверок на вводимые данные. ќдин из способов Ц провести проверку содержимого каждого вход€щего запроса и сравнить его с заранее определенными правилами. Ёто предотвратит проникновение злоумышленных SOAP запросов в Web-службы на уровне исходного кода. Mod_security может использоватьс€ дл€ защиты против всех типов нападений в том случае, когда вы правильно развернули и настроили его дл€ Web-служб. ¬ этой статье будет подробно рассказано - как настраивать mod_security дл€ защиты Web-служб.

ѕосле установки Web-служб необходимо провести грамотную защиту от различных направлений атак.  аждое направление атак требует своего подхода со стороны защиты. ¬ качестве примера рассмотрим фиктивный случай с банком.

Blue Bank (www.bluebank.example.com) только что прин€л Web-сервисы с использованием mod_security. Ёти службы предоставл€ют банковые сервисы через »нтернет дл€ финансовых партнеров и клиентов (баланс счета, денежные переводы, исправление личных данных). Ќа рисунке 1 показана архитектура развертки Web служб Blue BankТa.

–исунок 1. —истема Web-служб Blue BankТa

—уществует много способов развертывани€ Web-служб. ¬ нашем случае Web-служба запускаетс€ на Tomcat/Axis и подключаетс€ к Web-серверу Apache. ѕриложени€ банковских Web-сервисов написаны на Java (с расширением файла .jws).

¬ажные части настроек Apache и Axis включают в себ€ Apache httpd.conf, который загружает Tomcat:

LoadModule jk2_module modules/mod_jk2.so
JkSet config.file /usr/local/apache2/conf/workers2.properties

‘айл Axis - web.xml, который поддерживает AxisServlet дл€ Web сервисов в обработке:

<servlet-mapping>                                            
    <servlet-name>AxisServlet</servlet-name>                 
    <url-pattern>*.jws</url-pattern>                         
</servlet-mapping>
— того момента, как выше указанные настройки вступили в силу, вы можете ставить любые Web-службы на свой сервер. ≈сли посмотреть ответ сервера на запрос банера, то можно увидеть следующее:

<code>Server: Apache/2.0.50 (Unix) mod_ssl/2.0.50 OpenSSL/0.9.7d mod_jk2/2.0.4</code>

Ётот баннер указывает на то, что Web-сервер крутитс€ на Apache/2.0.50 (Unix) с запущенным модулем mod_jk2/2.0.4. Axis запускаетс€ как часть Web-приложени€ Tomcat и готов дл€ подн€ти€ Web-сервисов. ƒл€ обеспечени€ безопасности на уровне Web- сервисов, Blue Bank загрузил модуль mod_security, предоставл€ющий возможности программной фильтрации. —ледующа€ строка в httpd.conf загружает модуль безопасности:

<code>LoadModule security_module    modules/mod_security.so</code>

— установленным mod_security Blue Bank может добавить правила фильтрации в httpd.conf:

<IfModule mod_security.c> 
     # Turn the filtering engine On or Off
     SecFilterEngine On
     SecFilterDefaultAction "deny,log,status:500"
     SecFilterScanPOST On

     . . .
     # Other rules
     . . .
</IfModule>

Ётого вполне достаточно, чтобы позволить системным администраторам и разработчикам использовать mod_security дл€ обнаружени€ вход€щих злонамеренных HTTP/HTTPS запросов.

–ассмотрим пример Web-сервиса просмотра баланса www.bluebank.example.com/axis/getBalance.jws WSDL-ответ этого Web сервиса будет приходить из www.bluebank.example.com/axis/getBalance.jws?wsdl

ћетод/»нтерфейс вывода баланса счета из данных, полученных от WSDL

“щательно рассмотренный WSDL-ответ €вл€етс€ результатом выполнени€ вход€щего HTTP запроса. ќсобый интерес здесь представл€ет метод инициализации, который берет банковый id и передает состо€ние счета обратно клиенту через HTTP. “эг операции устанавливает методы, которые может использовать клиент Web-сервисов. ¬ажные отрывки файла WSDL включают:

<wsdl:operation name="getInput">
 <wsdlsoap:operation soapAction=""/>
   <wsdl:input name="getInputRequest">
     <wsdlsoap:body encodingStyle=http://schemas.xmlsoap.org/soap/encoding/
             namespace="http://DefaultNamespace"
             use="encoded"/>
   </wsdl:input>
   <wsdl:output name="getInputResponse">
     <wsdlsoap:body encodingStyle=http://schemas.xmlsoap.org/soap/encoding/
             namespace="http://www.bluebank.example.com/axis/getBalance.jws"
             use="encoded"/>
   </wsdl:output>

<wsdl:message name="getInputResponse">
    <wsdl:part name="getInputReturn" type="xsd:string"/>
</wsdl:message>
<wsdl:message name="getInputRequest">
    <wsdl:part name="id" type="xsd:string"/>
</wsdl:message>
 ак показано выше, передача id конкретному методу приведет к возврату строки в выходных данных.  огда вы посылаете id банкового счета как входные данные Web-сервису, вы получаете информацию о балансе счета.

¬ызов Web-сервиса через HTTP

 лиенты или партнеры Blue Bank, запрашивающие информацию о состо€нии счета через »нтернет могут выбрать информацию реквизита, послав правильно собранный конверт Web-сервисам банка. Ќа рисунке 2 показан HTTP запрос на информацию о балансе счета с id 12123, посланный Web-сервису.

–исунок 2. ¬ызов Web сервиса через HTTP

—уществует несколько способов создани€ SOAP клиентов, которые будут генерировать SOAP запросы правильного формата. Ќиже представлен пример SOAP клиента с использованием SOAP::Lite на Perl. —ледующий простой код генерирует SOAP запрос:

#!perl -w
use SOAP::Lite;

print SOAP::Lite
  -> service('http://www.bluebank.example.com/axis/getBalance.jws?wsdl')
  -> getInput('12123');

ќднако существует веро€тность перехвата HTTP-запроса с помощью снифера, например ethereal. HTTP/SOAP запрос, посланный на www.bluebank.example.com с id 12123 сгенерирует что-то вроде этого:

POST /axis/getBalance.jws HTTP/1.0
Content-Type: text/xml; charset=utf-8
SOAPAction: ""
Content-Length: 576
Expect: 100-continue
Host: www.bluebank.example.com

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:tns="http://www.bluebank.example.com/axis/getBalance.jws" xmlns:types="
http://www.bluebank.example.com/axis/getBalance.jws/encodedTypes"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <soap:Body
soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
                <q1:getInput xmlns:q1="http://DefaultNamespace">
                        <id xsi:type="xsd:string">12123</id>
                </q1:getInput>
        </soap:Body>
</soap:Envelope> 

...

HTTP/1.1 200 OK
Date: Mon, 03 Jan 2005 19:24:10 GMT
Server: Apache/2.0.50 (Unix) mod_ssl/2.0.50 OpenSSL/0.9.7d mod_jk2/2.0.4
Set-Cookie: JSESSIONID=69C6540CC427A8B064C0795ADDFC20EA; Path=/axis
Content-Type: text/xml;charset=utf-8
Connection: close

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
                xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <soapenv:Body>
                <ns1:getInputResponse
soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
                        xmlns:ns1="http://DefaultNamespace">
                        <ns1:getInputReturn
xsi:type="xsd:string">$2500</ns1:getInputReturn>
                </ns1:getInputResponse>
        </soapenv:Body>
</soapenv:Envelope>

¬страиваем ресурсы Web-сервисов в mod_security

Web сервис Blue BankТа использует URL www.bluebank.example.com/axis/getBalance.jws. Ќеобходимо создать набор правил дл€ этого ресурса. Blue Bank встроил этот ресурс в httpd.conf:

<IfModule mod_security.c>
      SecFilterEngine On
      SecFilterDefaultAction "deny,log,status:500"
      # Other rules
# ------- Rules for web services --------------------------
      <Location /axis/getBalance.jws>
        SecFilterInheritance Off
        SecFilterDefaultAction "deny,log,status:500"
        SecFilterScanPOST On
        SecFilterCheckURLEncoding On
        SecFilterCheckUnicodeEncoding On
      </Location>
#---------------------------------------------------------------
</IfModule>

—ледующий блок директивы относитс€ к критерию фильтрации дл€ /axis/getBalance.jws. «десь добавл€етс€ требуема€ метка-заполнитель дл€ защиты Web-сервиса. ћетки-заполнители наход€тс€ в блоке <Location>.

# ------- Rules for web services --------------------------
<Location /axis/getBalance.jws>
        SecFilterInheritance Off
        SecFilterDefaultAction "deny,log,status:500"
        SecFilterScanPOST On
        SecFilterCheckURLEncoding On
        SecFilterCheckUnicodeEncoding On
</Location>
#---------------------------------------------------------------

«десь наход€тс€ две очень важные директивы:

SecFilterInheritance Off

Ёта директива отключает другие правила и дает пустое пространство дл€ нового набора правил, разрешающих вводить только путь.

SecFilterScanPOST On

ƒл€ вызова процедур Web сервисов используетс€ метод POST. —ледовательно, следующа€ директива, которую следует задействовать Ц SecFilterScanPost Ц дл€ включени€ POST фильтрации.

¬ыполнив эти действи€, Blue Bank установил защиту в форме mod_security.  роме того, mod_security знает что нужно охран€ть Ц id, который посылают клиенты Web-сервису в SOAP конверте.

«ащищаемс€ от ƒругих Ќаправлений јтак

ѕервым делом дл€ защиты ото всех вход€щих злоумышленных запросов, Blue BankТу нужно перехватить значение id, чтобы предостеречь клиента от ввода неверного значени€. SOAP запрос использует XML тэг дл€ передачи информации id во внутренний код Web сервиса. “эг выгл€дит примерно следующим образом:

<q1:getInput xmlns:q1="http://DefaultNamespace">
     <id xsi:type="xsd:string">12123</id>
</q1:getInput>

„тобы отфильтровать запрос, mod_security должен как-то прочитать значение, ассоциированное с тэгом; в нашем случае это 12123. ¬ mod_security имеетс€ несколько возможностей дл€ перехвата значени€, переданного с POST запросом. ќдин из методов Ц это использование заготовленного фильтра:

<Location /axis/getBalance.jws>
    SecFilterInheritance Off            
    SecFilterDefaultAction "deny,log,status:500"
    SecFilterScanPOST On
    SecFilterCheckURLEncoding On
    SecFilterCheckUnicodeEncoding On   
    SecFilterSelective POST_PAYLOAD "<\s*id[^>]*>" chain
</Location>

¬ыделенна€ лини€ перехватывает запрос, сделанный на id. POST_PAYLOAD перехватывает блок данных POST и пытаетс€ сравнить его с правильной маской (<\s*id[^>]*>). Ёта маска регул€рного выражени€ подтверждает, что существует тэг дл€ id. “олько после этого процесс пойдет дальше по оставшимс€ проверкам (из-за цепной директивы). ƒругими словами, если тэг id существует, mod_security переходит к следующей проверке.

≈сли в POST запросе содержитс€ id, то сервер сможет обработать информацию. ќднако злоумышленник может модифицировать определенное значение, чтобы провести инъекцию. —уществует четыре основных методов атак.

¬ид атаки 1: »нъекци€ в буфер с непосто€нным размером

ќдной из основных опасностей при передаче большого буфера в переменную €вл€етс€ то, что большой буфер может вызвать сбой в работе приложени€ и/или выполнить произвольный код во врем€ работы. ѕравило, представленное ниже защищает переменную id от данного типа атаки:

<Location /axis/getBalance.jws>
        SecFilterInheritance Off
        
        SecFilterDefaultAction "deny,log,status:500"
        SecFilterScanPOST On
        SecFilterCheckURLEncoding On
        SecFilterCheckUnicodeEncoding On
    
        SecFilterSelective POST_PAYLOAD "<\s*id[^>]*>" chain
        SecFilterSelective POST_PAYLOAD "<\s*id[^>]*>.{6,}</\s*id\s*>" 
		  "deny,status:500"
</Location>

Ёта директива позвол€ет принимать в буфер только первые п€ть символов. »спользуетс€ маска ввода <\s*id[^>]*>.{6,}</\s*id\s*>. „тобы убедитьс€ в том, что описанный выше блок директив работает, Blue Bank может послать два запроса, один Ц соответствующий установленной длине; другой Ц превышающий еЄ.

POST /axis/getBalance.jws HTTP/1.0
Content-Type: text/xml; charset=utf-8
SOAPAction: ""
Content-Length: 576
Expect: 100-continue
Host: www.bluebank.example.com

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:tns="http://www.bluebank.example.com/axis/getBalance.jws" xmlns:types="
http://www.bluebank.example.com/axis/getBalance.jws/encodedTypes"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <soap:Body
soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
                <q1:getInput xmlns:q1="http://DefaultNamespace">
                        <id xsi:type="xsd:string">12123</id>
                </q1:getInput>
        </soap:Body>
</soap:Envelope>

...

HTTP/1.1 200 OK
Date: Mon, 03 Jan 2005 19:24:10 GMT
Server: Apache/2.0.50 (Unix) mod_ssl/2.0.50 OpenSSL/0.9.7d mod_jk2/2.0.4
Set-Cookie: JSESSIONID=69C6540CC427A8B064C0795ADDFC20EA; Path=/axis
Content-Type: text/xml;charset=utf-8
Connection: close

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
                xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <soapenv:Body>
                <ns1:getInputResponse
soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
                        xmlns:ns1="http://DefaultNamespace">
                        <ns1:getInputReturn
xsi:type="xsd:string">$2500</ns1:getInputReturn>
                </ns1:getInputResponse>
        </soapenv:Body>
</soapenv:Envelope>

¬ случае, приведенном выше, буфер из п€ти символов был пропущен и сервер прислал ответ со значением $2500. Ќиже показан запрос и ответ сервера на id 121234 (шесть символов):

POST /axis/getBlalance.jws HTTP/1.0
Content-Type: text/xml; charset=utf-8
SOAPAction: ""
Content-Length: 577
Expect: 100-continue
Host: www.bluebank.example.com

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:tns="http://www.bluebank.example.com/axis/getBalance.jws" xmlns:types="
http://www.bluebank.example.com/axis/getBalance.jws/encodedTypes"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <soap:Body
soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
                <q1:getInput xmlns:q1="http://DefaultNamespace">
                        <id xsi:type="xsd:string">121234</id>
                </q1:getInput>
        </soap:Body>
</soap:Envelope>

...

HTTP/1.1 500 Internal Server Error
Date: Mon, 03 Jan 2005 22:00:33 GMT
Server: Apache/2.0.50 (Unix) mod_ssl/2.0.50 OpenSSL/0.9.7d mod_jk2/2.0.4
Content-Length: 657
Connection: close
Content-Type: text/html; charset=iso-8859-1

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html xmlns:v="urn:schemas-microsoft-com:vml" 
	xmlns:o="urn:schemas-microsoft-com:office:office" 
		xmlns="http://www.w3.org/TR/REC-html40"><head>
   <title>500 Internal Server Error</title>
  </head><body>
  <h1>Internal Server Error</h1>
  <p>The server encountered an internal error or misconfiguration and was
  unable to complete your request.</p>
  <p>Please contact the server administrator, you@example.com and inform
  them of the time the error occurred, and anything you might have done that
  may have caused the error.</p>
  <p>More information about this error may be available in the server
error
  log.</p>
  <hr />
  <address>Apache/2.0.50 (Unix) mod_ssl/2.0.50 OpenSSL/0.9.7d
mod_jk2/2.0.4
  Server  at 192.168.7.50 Port 80</address>
</body></html>

ћодуль mod_security отклонил этот запрос. —татус 500 говорит о том, что ответ получен. “аким образом, запрос никогда не затронет уровн€ Web-сервисов. Blue BankТу удалось поострить грамотную защиту от переполнени€ буфера Ц часто встречающейс€ и игнорируемой у€звимости.

¬ид јтаки 2: »нъекци€ ћета —имвола

ƒруга€ угроза состоит в использовании мета символов (%,Т,Ф). Ёти символы могут стать причиной атаки методом SQL инъекции, привод€щей к утечке информации. —ледующа€ стратеги€ обеспечит устойчивость к таким атакам.

<Location /axis/getBalance.jws>
   SecFilterInheritance Off
       
   SecFilterDefaultAction "deny,log,status:500"
   SecFilterScanPOST On
   SecFilterCheckURLEncoding On
   SecFilterCheckUnicodeEncoding On
     
   SecFilterSelective POST_PAYLOAD "<\s*id[^>]*>" chain
   SecFilterSelective POST_PAYLOAD "<\s*id[^>]*>.{6,}</\s*id\s*>"
     "deny,status:500"
   SecFilterSelective POST_PAYLOAD "<\s*id[^>]*>.*[^a-zA-Z0-9][^<]*</\s*id\s*>"
     "deny,status:500"     
</Location>

ћаска выражени€ <\s*id[^>]*>.*[^a-zA-Z0-9][^<]*</\s*id\s*> отклон€ет HTTP запрос, если переменна€ POST_PAYLOAD содержит символы, не €вл€ющимис€ строковыми. Ёто очень важна€ возможность в модуле mod_security.

Ќиже показан запрос и ответ сервера на id 12Т12:

POST /axis/getBalance.jws HTTP/1.0
Content-Type: text/xml; charset=utf-8
SOAPAction: ""
Content-Length: 576
Expect: 100-continue
Host: www.bluebank.example.com

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:tns="http://www.bluebank.example.com/axis/getBalance.jws" xmlns:types="
http://www.bluebank.example.com/axis/getBalance.jws/encodedTypes"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <soap:Body
soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
                <q1:getInput xmlns:q1="http://DefaultNamespace">
                        <id xsi:type="xsd:string">12'12</id>
                </q1:getInput>
        </soap:Body>
</soap:Envelope>

...

500 Internal Server Error
HTTP/1.1 500 Internal Server Error
Date: Mon, 03 Jan 2005 22:00:33 GMT
Server: Apache/2.0.50 (Unix) mod_ssl/2.0.50 OpenSSL/0.9.7d mod_jk2/2.0.4
Content-Length: 657
Connection: close
Content-Type: text/html; charset=iso-8859-1

Ёта атака тоже не удалась, а mod_security перехватил еЄ.

¬ид јтаки 3: SQL инъекци€

¬ переменные можно вставл€ть и SQL операторы. ¬озможно и объединение нескольких SQL операторов. ≈сли ваше приложение не очищает такие входные данные, то злоумышленники могут добавить SQL операторы к уже существующим, часто с плачевными последстви€ми. Blue Bank блокировал атаки типа SQL-инъекци€, добавив следующие директивы:

<Location /axis/getBalance.jws>
   SecFilterInheritance Off
   SecFilterDefaultAction "deny,log,status:500"
   SecFilterScanPOST On
   SecFilterCheckURLEncoding On
   SecFilterCheckUnicodeEncoding On
 
   SecFilterSelective POST_PAYLOAD "<\s*id[^>]*>" chain
   SecFilterSelective POST_PAYLOAD "<\s*id[^>]*>.{6,}</\s*id\s*>" 
     "deny,status:500"
   SecFilterSelective POST_PAYLOAD "<\s*id[^>]*>.*[^a-zA-Z0-9][^<]*</\s*id\s*>" 
     "deny,status:500"
   SecFilterSelective POST_PAYLOAD "<\s*id[^>]*>.*select.+from[^<]*</\s*id\s*>" 
     "deny,status:500"
</Location>

¬ыделенные жирным строки провер€ют, содержатс€ ли в запросе слова "select * from . . .", а если находит их, то возвращает статус 500, как в предыдущем примере. јналогично вы можете добавить SQL операторы, которые следует блокировать, обновл€ть и т.п.

¬ид јтаки 4: SOAP –аскрытие ƒефектного  ода

ќдин из основных источников информации в Web-сервисах Ц это дефектный код. ¬ызванна€ на сервере ошибка может создать дефектный код. Ќиже представлен запрос злоумышленника и ответ сервера в результате подстановки символа Ђаї вместо целого числа в переменную id:

POST /axis/getBalance.jws HTTP/1.0
Content-Type: text/xml; charset=utf-8
SOAPAction: ""
Content-Length: 569
Expect: 100-continue
Host: www.bluebank.example.com

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:tns="http://www.bluebank.example.com/axis/getBalance.jws" xmlns:types="
http://www.bluebank.example.com/axis/getBalance.jws/encodedTypes"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <soap:Body soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
                <q1:getInput xmlns:q1="http://DefaultNamespace">
                        <id xsi:type="xsd:string">a</id>
                </q1:getInput>
        </soap:Body>
</soap:Envelope>

...

500 Internal Server Error
HTTP/1.1 500 Internal Server Error
Date: Tue, 04 Jan 2005 16:22:14 GMT
Server: Apache/2.0.50 (Unix) mod_ssl/2.0.50 OpenSSL/0.9.7d mod_jk2/2.0.4
Set-Cookie: JSESSIONID=1CAF4CD0ED0F38FB40ECBC7BDAB56C75; Path=/axis
Content-Type: text/xml;charset=utf-8
Connection: close

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
        xmlns:xsd="http://www.w3.org/2001/XMLSchema"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <soapenv:Body>
   <soapenv:Fault>
        <faultcode>soapenv:Server.userException</faultcode>
        <faultstring>java.lang.NumberFormatException: 
		  For input string:"a"</faultstring>
   <detail/>
   </soapenv:Fault>
  </soapenv:Body>
</soapenv:Envelope>

 ак показано в ответе сервера, дефектный код может раскрыть критическую внутреннюю информацию. Ёто достаточно веский довод дл€ создани€ соответствующих фильтров:

<Location /axis/getBalance.jws>
   SecFilterInheritance Off
        
   SecFilterDefaultAction "deny,log,status:500"
   SecFilterScanPOST On
   SecFilterCheckURLEncoding On
   SecFilterCheckUnicodeEncoding On
     
   SecFilterSelective POST_PAYLOAD "<\s*id[^>]*>" chain
   SecFilterSelective POST_PAYLOAD "<\s*id[^>]*>.{6,}</\s*id\s*>" 
     "deny,status:500"
   SecFilterSelective POST_PAYLOAD "<\s*id[^>]*>.*[^a-zA-Z0-9][^<]*</\s*id\s*>" 
     "deny,status:500"
     
   SecFilterScanOutput On
   SecFilterSelective OUTPUT "faultcode" "deny,status:500"
</Location>
SecFilterScanOutput On

Ёта директива сканирует выходной блок данных и принимает определенные фильтры.

<code>SecFilterSelective OUTPUT "faultcode" "deny,status:500"</code>

ƒиректива блокирует исход€щий трафик, содержащий дефектные коды. ≈сли атакующий посылает сформированный запрос с символом Ђаї в поле целых чисел, он получит ответ, похожий на этот:

HTTP/1.1 500 Internal Server Error
Date: Mon, 03 Jan 2005 22:00:33 GMT
Server: Apache/2.0.50 (Unix) mod_ssl/2.0.50 OpenSSL/0.9.7d mod_jk2/2.0.4
Content-Length: 657
Connection: close
Content-Type: text/html; charset=iso-8859-1

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
   <title>500 Internal Server Error</title>
  </head><body>
  <h1>Internal Server Error</h1>
  <p>The server encountered an internal error or misconfiguration and was
  unable to complete your request.</p>
  <p>Please contact the server administrator,  you@example.com and inform
  them of the time the error occurred, and anything you might have done that
  may have caused the error.</p>
  <p>More information about this error may be available in the server
error 
  log.</p>
  <hr />
  <address>Apache/2.0.50 (Unix) mod_ssl/2.0.50 OpenSSL/0.9.7d
mod_jk2/2.0.4
  Server  at 192.168.7.50 Port 80</address>
</body></html>

«аключение

mod_security выгл€дит как еще один продукт в области безопасности, однако имеет хорошее превосходство над другими уже доступными утилитами.  роме обнаружени€ вторжений и системы защиты на уровне HTTP, mod_security также имеет возможности фильтровани€ POST_PAYLOAD.

 роме того, превосходство mod_security состоит в том, что разработчики и Web администраторы могут защищать Web-сервисы без исправлени€ исходного когда приложений. ќн не сделает исходный код лучше; просто теперь организаци€ может подн€ть эффективную дополнительную защиту своих Web-сервисов без необходимости правки множества строк кода.

Shreeraj Shah основатель и руководитель Net-Square.

или введите им€

CAPTCHA
Melaniemub
23-10-2016 14:13:13
XRumer 12.0.19 is the BEST
0 |
AndreiOsin
12-11-2016 15:20:20
http://ubra.ru &#1050;&#1072;&#1082; &#1091;&#1079;&#1085;&#1072;&#1090;&#1100;
0 |
Anniskwet
13-11-2016 12:59:36
http://active-travels.ru/ - http://active-travels.ru –Ъ —Б–Њ–ґ–∞–ї–µ–љ–Є—О –ґ–µ–љ—Б–Ї–Є–є —Б–∞–є—В http://7nebo.org/ - http://7nebo.org/ –љ–µ –Љ–Њ–ґ–µ—В –њ–Њ–ї–љ–Њ—Б—В—М—О –Њ—В–Ї–∞–Ј–∞—В—М—Б—П –Њ—В —А–µ–Ї–ї–∞–Љ—Л –≤ —Б—В–∞—В—М—П—Е. –§–Њ—А—Г–Љ –і–Є–µ—В, –ґ–µ–љ—Б–Ї–Є–є —Д–Њ—А—Г–Љ, —Б–∞–Љ—Л–є —Г—О—В–љ—Л–є –ґ–µ–љ—Б–Ї–Є–є —Б–∞–є—В http://goldwomen.net/ - http://goldwomen.net/ –Є–љ—Д–Њ—А–Љ–∞—Ж–Є–Њ–љ–љ—Л–є —Ж–µ–љ—В—А. –Ц–µ–љ—Б–Ї–Є–є —Б–µ–Ї—А–µ—В http://donlady.ru/ - http://donlady.ru/ –Ї—А–∞—Б–Є–≤–Њ–є –Њ—Б–∞–љ–Ї–Є –і–µ—А–ґ–Є—В–µ —Г—И–Є –≤—Л—И–µ –њ–ї–µ—З, –∞ –њ–ї–µ—З–Є –≤—Л—И–µ –±–µ–і–µ—А. –Ш—В–∞–Ї, –≤–Њ—В 10 –њ—А–µ–і–ї–Њ–ґ–µ–љ–Є–є –Њ—В –ґ–µ–љ—Б–Ї–Њ–≥–Њ –Ї–ї—Г–±–∞ http://ladyvipclub.ru/ - http://ladyvipclub.ru/ –і–ї—П –≤–∞—Б. –Э–∞ –і–∞–љ–љ–Њ–Љ –і–Є—Б–Ї–µ –Њ–±—К–µ–і–µ–љ—Л –Њ–±–∞ –і–Є—Б–Ї–∞ –≤–Є–і–µ–Њ—Н–љ—Ж–Є–Ї–ї–Њ–њ–µ–і–Є–Є –Љ–Є—А —А–µ–Љ–Њ–љ—В–∞ http://newremont.net/ - http://newremont.net/ –Ю–љ —Г–Ї—А–∞—Б–Є–ї –Њ–і–љ—Г –Є–Ј –µ–ї–µ–є –≤ —В–Њ—А–≥–Њ–≤–Њ–Љ —Ж–µ–љ—В—А–µ –Љ–Є—А —А–µ–Љ–Њ–љ—В–∞ http://remontland.com/ - http://remontland.com/ –Т —В–µ–Ї—Г—Й–Є–є http://ekenergo.com.ua/ - http://ekenergo.com.ua/ —А–µ–Љ–Њ–љ—В –і–Њ–Љ–Њ–≤ –≤ –Љ–Њ—Б–Ї–≤–µ, –Ї–∞–Ї –њ—А–∞–≤–Є–ї–Њ, –≤—Е–Њ–і–Є—В –≤—Б—П –љ–µ–Њ–±—Е–Њ–і–Є–Љ–∞—П —Б–Љ–µ—В–∞ http://stroyprorab.com/okna-i-dveri/43-francuzskie-okna-chto-eto-takoe.html - —Д—А–∞–љ—Ж—Г–Ј—Б–Ї–Є–µ –Њ–Ї–љ–∞ –Я–Њ–ґ–µ–љ—Б–Ї–Є –≤–∞—И –Њ–љ–ї–∞–є–љ –ґ—Г—А–љ–∞–ї –ґ–µ–љ—Б–Ї–Є–µ —Б–µ–Ї—А–µ—В http://dhora.com/ - http://dhora.com/—Л –љ–∞ –Ї–∞–ґ–і—Л–є –і–µ–љ—М onwomen. –§–Є–љ–∞–љ—Б–Њ–≤—Л–є —А–µ–Ј—Г–ї—М—В–∞—В –њ–Њ —А–∞–±–Њ—В–∞–Љ, –≤—Л–њ–Њ–ї–љ–µ–љ–љ—Л–Љ –њ–Њ –і–Њ–≥–Њ–≤–Њ—А—Г –љ–∞ —Б—В—А–Њ–Є—В–µ–ї—М—Б—В–≤–Њ http://remstroyvip.ru/ - http://remstroyvip.ru/ ;. – –∞–≤–љ–Њ–і—Г—И–љ—Л–Љ–Є, –њ–Њ–ї—Г—З–Є–≤ –≤ –і–∞—А –≤–µ—Й–Є—Ж—Л –Є–Ј —Н—В–Є—Е –Њ—В–і–µ–ї–Њ–≤ –Є–љ—В–µ—А–љ–µ—В–Љ–∞–≥–∞–Ј–Є–љ–∞ –њ–Њ–і–∞—А–Ї–Њ–≤ http://udivit.com/ - http://udivit.com/.
0 |