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
—траницы: 1  2  
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 |
RufimRashy
19-01-2017 18:53:18
&#1074;&#1080;&#1072;&#1075;&#1088;&#1072; &#1086;&#1090;&#1079;&#1099;&#1074;&#1099;
0 |
MichaelKix
22-01-2017 00:38:05
There are lots of various wigs out there. Girls put on wigs for a lot of various reasons for occasion, to pay thinning hair in certain Wigs For Black Women spots to total baldness due to health concerns. Picking the right anybody can be mind-boggling at this kind of instances. One more reason most women use wigs is always to attain hairstyles which are extremely hard related to Wigs For Women their own head of hair. the lace front side wig is one kind of wig. This wig has individual hairs which can be fingers sewn in to a lace fabric which can be identified only in front section of the wig. By hand stitching the hair Clip In Hair Extensions in to the lace top it provides the effect that this hair are expanding from the head. When you have the wig secured in place, the lace materials is trimmed off of at the hairline without having Clip In Hair Extensions decreasing any of the knots. The lace are able to be stuck in place and according to what type of adhesive can be used, may last from days to weeks. Right after gluing the lace lower, makeup products does apply to conceal the lace. You won't be capable of determine in which the wig collection will begin Wigs and that way you will find a natural searching hairpiece. This is basically the quite good reason that it is the best type of wig you will find.
0 |
—траницы: 1  2