В главе 15 про Advanced Protocol Handling мы познакомились с механизмом манипуляции пакетами MPF. Но эта часть была бы не полной, если не рассказывать про то, что ASA умеет в плане разбора самого протокола. Напомню, что программисты научили ASA понимать массу протоколов. Понимать значит знать внутреннюю структуру, поля, сообщения данного протокола. А значит манипулировать данными 7 уровня, данными самого приложения.
Как же это сделать?
Прежде чем я буду закидывать вас командами, лирическое отступление, притча, которую я сочинил и рассказывал на курсах.
——-
Представьте себе: вы работаете на рудниках. Например, добываете самоцветы на Урале в 18 веке. Ваши руки сильны и мозолисты, глаз даже в темноте отличит малахит от змеевика. Вы молоды и влюблены. Она прекрасна и юна и вы хотите преподнести ей в сочельник малахитовую шкатулку ручной работы. Но вы не умеете точить малахит. Вы даже не можете с уверенностью сказать, подойдет ли вот этот кусок малахита для шкатулки? А может там трещина, или еще какой изъян? Но на ваше счастье в деревне близ рудника живет и творит МалахитовыйМастер. Вам нужно лишь собрать в мешок весь малахит и принести Мастеру. Сам он стар и никуда не выходит, так что поиск — ваша задача. Из вашего мешка Мастер отберет нужное, а мусор выкинет. И родится чудо рукотворное — подарок суженой неземной красоты…
——
Дочитали? теперь параллели: вы — это policy-map обычный. Вы можете отобрать в класс только внешним признакам. По заголовку 4 уровня. Мастер — policy-map type inspect {PROTOCOL}, т.е. специальный, заточенный на работу конкретно с этим протоколом. Он сам пакеты не ищет ему в мастерскую пакеты приносит обычный policy-map.
Теперь чуть подробнее:
Подобно обычной, описанной в MPF конструкции
class-map -> policy-map -> service-policy
есть аналогичная конструкция, но только специфичная для конкретного протокола
class-map type inspect {PROTO} -> policy-map type inspect {PROTO}
своей service-policy type inspect нет, потому что спецполитика применяется как дополнительный фильтр при включении обычного инспектирования в обычной policy-map
class-map type inspect ?
configure mode commands/options:
dns Configure a class-map of type DNS
ftp Configure a class-map of type FTP
h323 Configure a class-map of type H323
http Configure a class-map of type HTTP
im Configure a class-map of type IM
rtsp Configure a class-map of type RTSP
sip Configure a class-map of type SIP...
здесь можно увидеть те протоколы, для которых ASA имеет спецклассы. Не все протоколы, которые ASA умеет разбирать глубоко, удостоились такой чести. Но об этом позже.
Понятно, что атрибуты у протокола http разительно отличаются от ftp или dns. Описывать здесь все атрибуты всех протоколов я не буду: будет понятна логика — можно будет подобрать нужные параметры
policy-map type inspect ?
configure mode commands/options:
dcerpc Configure a policy-map of type DCERPC
dns Configure a policy-map of type DNS
esmtp Configure a policy-map of type ESMTP
ftp Configure a policy-map of type FTP
gtp Configure a policy-map of type GTP
h323 Configure a policy-map of type H.323
http Configure a policy-map of type HTTP
im Configure a policy-map of type IM
ip-options Configure a policy-map of type IP-OPTIONS
ipsec-pass-thru Configure a policy-map of type IPSEC-PASS-THRU
mgcp Configure a policy-map of type MGCP
netbios Configure a policy-map of type NETBIOS
radius-accounting Configure a policy-map of type Radius Accounting
rtsp Configure a policy-map of type RTSP
sip Configure a policy-map of type SIP
skinny Configure a policy-map of type Skinny
Здесь можно увидеть все протоколы, для которых есть свой «МалахитовыйМастер». Как видите, их больше, чем спецклассов. Это связано с тем, что у части протоколов нужно контролировать всего 1-2 параметра и их можно описать непосредственно в спецполитике командой
parameters
Эти параметры тоже свои для каждого протокола. Например:
policy-map type inspect ipsec-pass-thru TEST
parameters
?
MPF policy-map parameter configuration commands:
ah Specify parameters for AH tunnel
esp Specify parameters for esp tunnel
exit Exit from MPF policy-map parameter configuration submode
help Help for MPF policy-map parameter submode commands
no Negate or set default values of a command
quit Exit from MPF policy-map parameter configuration submode
Создав спецполитику мы должны ее применить. Напомню, что сама по себе она не может быть применена, т.к оперирует уже «очищенными» от заголовков пакетами приложений. А на вход ей пакеты поставляет обычная политика командой
inspect {PROTO} [{ИМЯ спецполитики}]
Давайте на примере разберем создание и применение спецполитики. Пусть мы хотим запретить удалять файл .htaccess с ftp сервера 172.16.1.100.
Для этого нам надо подготовить шаблон текстовый, который мы будем искать
regex HTACCESS “\.[Hh][Tt][Aa][Cc][Cc][Ee][Ss][Ss]”
=============================================================================
Для справки: ASA использует вот такой язык регулярных выражений
Character |
Description |
Notes |
. |
Dot |
Matches any single |
(exp) |
Subexpression |
A subexpression For example, d(o|a)g matches dog and dag, but do|ag matches do and ag. |
| |
Alternation |
Matches either expression |
? |
Question mark |
A quantifier that Note: You must enter Ctrl+V |
* |
Asterisk |
A quantifier that |
{x} |
Repeat quantifier |
Repeat exactly x times. |
{x,} |
Minimum repeat quantifier |
Repeat at least x times. |
[abc] |
Character class |
Matches any character in |
[^abc] |
Negated character class |
Matches a single |
[a-c] |
Character range class |
Matches any character in The dash (-) character is |
"" |
Quotation marks |
Preserves trailing or |
^ |
Caret |
Specifies the beginning |
\ |
Escape character |
When used with a metacharacter, matches a literal character. For example, \[ matches the left square bracket. |
char |
Character |
When character is not a metacharacter, matches the literal character. |
\r |
Carriage return |
Matches a carriage return |
\n |
Newline |
Matches a new line 0x0a |
\t |
Tab |
Matches a tab 0x09 |
\f |
Formfeed |
Matches a form feed 0x0c |
\xNN |
Escaped hexadecimal |
Matches an ASCII |
\NNN |
Escaped octal number |
Matches an ASCII |
================Конец справки======================================
Теперь создадим спецкласс, где опишем критерии поиска
class-map type inspect ftp HT
match filename regex HTACCESS
match request-command dele
Примечание: если надо искать более одного регулярного выражения в классе, то можно изготовить несколько regex и объединить их в кучку командой:
class-map type regex match-any REGCLASS
match regex REGEX1
match regex REGEX2
а потом можно применить такой класс вместо явного указания regex, например в нашем случае
match filename regex class {REGCLASS}
Затем создадим спецполитику
policy-map type inspect ftp FTPDEL
class HT
reset [log]
Дальше надо куда-то эту конструкцию применить.
Например,
policy-map global_policy
class inspection_default
inspect ftp strict FTPDEL
!
service-policy global_policy global
Однако, как легко убедиться, так мы запретим удалять нужный файл не только с 172.16.1.100, но и вообще с любого ftp сервера. Как же исправить эту ситуацию?
Для этого надо вспомнить, что пакеты на анализ спецполитике поставляет обычная. А следовательно надо описать не дефолтовый класс для инспектирования ftp и применить спецполитику для инспектирования этого, нового класса
access-list FTPSPEC permit tcp any host 172.16.1.100 eq 21
class-map FTPDEL
match access-list FTPSPEC
policy-map FTPSPEC
class FTPSPEC
inspect ftp strict HT
Теперь применим эту новую политику на интерфейс INS
service-policy FTPSPEC interface INS
Важно: часто возникает конфликт, если инспектирование одного и того же протокола включено в политике глобальной, и политике, примененной на интерфейсе. Инспектирование просто перестает работать! Я крайне рекомендую не допускать такой ситуации и отключать инспектирование глобальное. Правда, если инспектирование данного протокола нужно и на других интерфейсах, придётся писать новую политику для них и применять отдельно на каждом интерфейсе.
Пусть в нашем примере нам надо лишь инспектировать ftp на указанный хост и более никуда. Тогда для чистоты отключим в глобальной политике:
policy-map global_policy
class inspection_default
no inspect ftp
И на этом наша настройка будет закончена. Сохраниться не забудьте 🙂
Чтобы посмотреть, срабатывает ли ваша политика, достаточно дать команду
show service-policy
где подробно, по всем классам и подклассам будет выведена статистика. В частности, будет показано, сколько пакетов было уничтожено
Для закрепления материала попробуйте заблокировать обращение по http на все сайты, содержащие в своем имени текст “odnoclas”. А также все передачи exe-файлов через http.
Метки: ASA, DPI, SNAF
Опубликовано: Безопасность cisco
» Оставить комментарий
Вы должны войти чтобы прокомментировать.