Logo GenDocs.ru

Поиск по сайту:  

Загрузка...

IPS - Система предотвращения вторжений. Прикладной скрипт - файл 1.doc


IPS - Система предотвращения вторжений. Прикладной скрипт
скачать (66.5 kb.)

Доступные файлы (1):

1.doc67kb.16.11.2011 18:16скачать

содержание

1.doc

МОСКОВСКИЙ АВИАЦИОННЫЙ ИНСТИТУТ

(ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ)


Факультет прикладной математики и физики

Кафедра вычислительной математики и программирования


Курсовая работа

по курсу

«Информационная безопасность»



Выполнил:

Федотов А. А.,

группа 08-506


Проверили:

Крижановский А. В.




Москва, 2010

Задание


Реализовать IPS (Intrusion Prevention System) одним из следующих подходов:

I. Прикладной код на C/C++/Perl/Python/Shell в режиме реального времени обрабатывает логи прикладного демона (Apache, Squid etc.) или сниффера (tcpdump) и блокирует доступ реконфигурацией IPtables;

*II. Plug-in для Snort с использованием snort-inline для блокировки трафика;

**III. Модуль ядра Linux/netfilter.


В качестве логики IPS должна реализовать один из следующих методов обнаружения атак:

Анализ содержания пакетов для прикладного сервиса на выбор (PostgreSQL, MySQL, HTTP, SMTP, FTP и пр.). Реализовать возможность задания нескольких сигнатур (можно использовать pcre для регулярных выражений или разработать свой простой язык описания сигнатур). Для примера можно взять соответствующие сигнатуры из базы Snort. Сбор TCP-потока не обязателен.

Приложить результаты тестирования/анализа к итоговому отчету.


IPS переводится как система предотвращения вторжений и представляет собой программную или аппаратную систему сетевой и компьютерной безопасности, обнаруживающую вторжения или нарушения безопасности и автоматически защищающую от них (ru.wikipedia.org).


Для реализации IPS-системы в данной курсовой работе был выбран первый подход. Прикладной код был написан на языке Python. Суть его состоит в том что он брабатывает логи утилиты tcpdump и блокирует доступ с помощью утилит ipset и iptables.


^ Программное обеспечение


Работа производилась под операционной системой Kubuntu 10.10 x64.

Работа программы основывается на стандартных утилитах tcpdump, iptables, а также утилите ipset, которая была дополнительно установлена из исходников.


tcpdump

tcpdump (от TCP и англ. dump — свалка, сбрасывать) — утилита UNIX (есть клон для Windows), позволяющая перехватывать и анализировать сетевой трафик, проходящий через компьютер, на котором запущена данная программа.

Для выполнения программы требуется наличие прав суперпользователя и прямой доступ к устройству (так, например, запуск из Jail во FreeBSD невозможен).

Основные назначения tcpdump:

  1. Отладка сетевых приложений.

  2. Отладка сети и сетевой конфигурации в целом.



iptables


iptables — утилита командной строки, является стандартным интерфейсом управления работой межсетевого экрана (брандмауэра) netfilter для ядер Linux версий 2.4 и 2.6. Для использования утилиты iptables требуются привилегии суперпользователя (root).

Иногда под словом iptables имеется в виду и сам межсетевой экран netfilter.

Принцип работы:

Все пакеты пропускаются через определенные для них последовательности цепочек. При прохождении пакетом цепочки, к нему последовательно применяются все правила этой цепочки в порядке их следования. Под применением правила понимается: во-первых, проверка пакета на соответствие критерию, и во-вторых, если пакет этому критерию соответствует, применение к нему указанного действия. Под действием может подразумеваться как элементарная операция (встроенное действие, например, ACCEPT, MARK), так и переход в одну из пользовательских цепочек. В свою очередь, действия могут быть как терминальными, то есть прекращающими обработку пакета в рамках данной базовой цепочки (например, ACCEPT, REJECT), так и нетерминальными, то есть не прерывающими процесса обработки пакета (MARK, TOS). Если пакет прошел через всю базовую цепочку и к нему так и не было применено ни одного терминального действия, к нему применяется действие по умолчанию для данной цепочки (обязательно терминальное).


ipset


ipset представляет собой набор инструментов, позволяющий работать с большими списками (sets) IP-адресов и/или портов. Поддерживается возможность динамического обновления списков при прохождении пакетов через правила правилам netfilter.

ipset состоит из следующих элементов:

  • Модуль ядра ip_set, обеспечивающий базовый инструментарий работы со списками записей, который используется модулями расширений.

  • Модули расширений, определяющие конкретные структуры записей и методы работы с ними, например, ip_set_iphash (тип данных iphash), ip_set_portmap (тип данных portmap) и т. д.

  • Userspace-утилита ipset, позволяющая выполнять различные операции со списками и записями в них:

    • Создание, удаление, переименование, вывод, очистка списков.

    • Добавление и удаление записей из списков, проверка наличия записи в списке.

    • Вывод справочной информации по работе со списками различного типа.

  • Модули расширений (библиотеки) для утилиты ipset, соответствующие модулям расширений в ядре, например, libipset_iphash (тип данных iphash), libipset_portmap (тип данных portmap) и т. д. Каждый такой модуль отвечает за обеспечение интерфейса между «своим» модулем ядра и конечным пользователем, в частности, проверку корректности вводимых и форматирование выводимых данных, а также вывод справочной информации по допустимым командам и параметрам.

  • Модули netfilter ipt_set (критерий set) и ipt_SET (действие SET), а также соответствующие модули (библиотеки) iptables (libipt_set и libipt_SET). Критерий set позволяет проверять различные параметры пакета (IP/MAC-адреса, TCP/UDP-порты источника и/или получателя) на предмет нахождения или отсутствия в списке. Действие SET позволяет добавлять или удалять записи из списка на основании указанных параметров пакета. Отметим, что в рамках обеспечения совместимости с грядущим релизом ipset 5, в iptables начиная с версии 1.4.9 IPv4-специфичные модули libipt_set и libipt_SET заменены на более универсальные libxt_set и libxt_SET, которые могут использоваться как в iptables, так и в ip6tables.



^ Описание программы


Алгоритм работы


Алгоритм работы состоит в том, что просматривается содержимое syn-пакетов на основе вывода tcpdump. В каждом пакете ищутся запрещенные сигнатуры, которые хранятся в 16-ричном виде в виде регулярных выражений в отдельном файле signature.txt. IP-адреса, с которых пришли пакеты, содержащие какую-либо сигнатуру, добавляются в множество запрещенных адресов с помощью утилиты ipset. Последующий отброс пакетов, приходящих с этих адресов осуществляется правилом в настройке iptables.

Tcpdump запускается программой со следующими ключами:

tcpdump -i eth0 -n –x

-i eth0 означает использование интерфейса eth0;

-n  - отображать ip-адрес вместо имени хоста;

-x – выводить содержимое пакета в 16-м виде.

Программой используются только данные об ip отправителя и содержимое пакета. При этом ip первоначально проверяются на соответсвие внутреннему ip компьютера, который узнается выполнением команды ifconfig. Такие пакеты не проверяются. То есть ведется мониторинг только входящих и транзитных пакетов.

Сигнатуры представляют собой регулярные выражения в соответствии синтаксисом языка Python. Хранятся в файле signature.txt каждая в отдельной строке.

Запрещенные адреса добавляются в множество адресов с именем badip следующей командой:

ipset -A badip <ip>

Но сначала производится проверка на возможное наличие в множестве с ключем –T.

Добавление правила iptables выглядит следующим образом:

iptables -F

iptables -A INPUT -m state --state NEW -m set --set badip src -j DROP

Флаг –F означает очистить все правила.

-A INPUT – обрабатывать только входящие пакеты;

-m state --state NEW применение фильтра к новым соединениям, то есть, соединениям с syn'ами.

-m set – использование модуля set.

--set badip src – использование множества badip.

-j DROP – действие (удаление).

На вывод программа подает отловленные ip-адреса, а так же номер сигнатуры, по которой был произведен запрет.


^ Код python-скрипта:


import os

import sys

import re

from operator import truth


own_ip = re.search('inet addr:(\d+\.\d+\.\d+\.\d+)', os.popen('ifconfig eth0 | grep "inet addr"', 'r').read()).group(1)


sign = open('signature.txt').read().split('\n')


os.system('iptables -F')

os.system('iptables -A INPUT -m state --state NEW -m set --set badip src -j DROP')


log=os.popen('tcpdump -i eth0 -n -x', 'r')


s = log.readline().strip()

while (s!=''):

res = re.search('IP (\d+\.\d+\.\d+\.\d+)', s)

if truth(res):

ip = res.group(1)

if (ip != own_ip):

content = ''

s = log.readline().strip()

while (truth(re.match('0x', s))):

content += s

s = log.readline().strip()

content = re.sub('\s+|0x....:', '', content)

for i in xrange(len(sign)):

if truth(re.search(sign[i], content)):

is_ip = os.popen('ipset -T badip '+ ip).read();

if (is_ip.find('NOT') != -1):

os.system('ipset -A badip '+ ip)

print 'banned IP: ' + ip + ' sig = ' + str(i)

else:

s = log.readline().strip()

else:

s = log.readline().strip()

continue


Тестирование:


root@sasha-A8M:/home/sasha/ib/kr# iptables -L

Chain INPUT (policy ACCEPT)

target prot opt source destination


Chain FORWARD (policy ACCEPT)

target prot opt source destination


Chain OUTPUT (policy ACCEPT)

target prot opt source destination

root@sasha-A8M:/home/sasha/ib/kr# ipset -N badip iphash

root@sasha-A8M:/home/sasha/ib/kr# ipset -L badip

Name: badip

Type: iphash

References: 0

Header: hashsize: 1024 probes: 8 resize: 50

Members:


root@sasha-A8M:/home/sasha/ib/kr# python ips.py

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode

listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes

banned IP: 194.67.1.150 sig = 0

banned IP: 87.242.88.24 sig = 1

banned IP: 93.186.230.141 sig = 1

banned IP: 87.240.189.106 sig = 1

banned IP: 94.100.191.212 sig = 1


root@sasha-A8M:/home/sasha/ib/kr# iptables -L

Chain INPUT (policy ACCEPT)

target prot opt source destination

DROP all -- anywhere anywhere state NEW match-set badip src


Chain FORWARD (policy ACCEPT)

target prot opt source destination


Chain OUTPUT (policy ACCEPT)

target prot opt source destination

root@sasha-A8M:/home/sasha/ib/kr# ipset -L badip

Name: badip

Type: iphash

References: 1

Header: hashsize: 1024 probes: 8 resize: 50

Members:

94.100.191.212

93.186.230.141

194.67.1.150

87.240.189.106

87.242.88.24


Здесь для вывода содержимого badip и правил iptables использовались соответствующие утилиты с ключом –L.


При тестировании использовался файл signature.txt с двумя сигнатурами следующего содержания:


766b6f6e7461.*465027275

(....)\1{10}


Первая представляет собой 2 фрагмента строки «vkontakte.ru». Соответственно при мониторинге проверялась загрузка страницы сайта vkontakte.ru, сожержащая пакеты с данной строкой.

Вторая отражает мощь возможности использования регулярных выражений. Сигнатура означает повторение более 10 раз одной и тоже пары байт. Пакеты с такой сигнатурой приходят при загрузке старницы mail.ru, которая также использовалась при тестировании.

Как видно из вывода программы, несколько ip-адресов были успешно отловлены, что говорит о стабильной работе.


Скачать файл (66.5 kb.)

Поиск по сайту:  

© gendocs.ru
При копировании укажите ссылку.
обратиться к администрации