Лабораторная работа №3 Защита информации в сетях




Дата канвертавання22.04.2016
Памер181.71 Kb.
ЛАБОРАТОРНАЯ РАБОТА №3

Защита информации в сетях



  1. Цель работы: Ознакомление с построением фильтров TCP/IP пакетов. Ознакомление с методами шифрования с открытым ключом на примере пакета gnupg.



  1. Краткие теоретические сведения.




    1. Литература См. Лекция 7,Лекция 8 (http://pogoda.nsk.su/ait)

    2. Firewall. Во все ядра Linux, начиная с 2.0, встроено средство для фильтрации сетевых пакетов. В 2.0 это ipfwadm, в 2.2 - ipchains, а в 2.4 и 2.6 - iptables. Мы будем рассматривать последний вариант, как наиболее современный.

  Принцип фильтрации: когда через ядро проходит пакет, он проверяется на совпадение с одним или несколькими правилами. При этом в зависимости от этих правил он может быть пропущен (ACCEPT), отброшен (DROP) или отклонен (REJECT). Кроме того, он может быть отправлен на проверку в следующую цепочку правил. Здесь же можно указать, что факт прохождения пакета, подходящего под определенное правило, должен быть отмечен в syslog. Правила могут включать в себя проверку адреса/порта источника/получателя, протокола, флагов TCP.

  Для изменения используемого набора правил используется утилита - iptables . Все правила хранятся в памяти ядра и при перезагрузке сбрасываются. По этой причине необходимо создать файл конфигурации, из которого правила фильтрации будут считываться при загрузке машины. Обычно это /etc/rc.d/rc.firewall. Это обычный скрипт оболочки, который вызывает /sbin/iptables с определенными параметрами, соответствующими составленным правилам. Поэтому в большинстве дистрибутивов для изменения конфигурации iptables необходимо отредактировать указанный файл и запустить его (этот файл, как правило, автоматически выполняется при загрузке машины). После чего можно посмотреть обновленную таблицу правил командой iptables -L.

Изначально существуют 3 цепочки, через которые пакеты входят на фильтрацию. INPUT - для входящих пакетов, OUTPUT для исходящих и FORWARD для проходящих через данную машину к другой. По мере движения пакета по цепочке выполняется сравнение с критериями и по результатам сравнения принимается решение о действии. Часть пакетов отбрасывается (на разных этапах по разным причинам), часть (опять же лишь подходящие под определенные правила) успешно выходит из фильтра. Оставшиеся (не подошедшие ни под одно правило) следуют действию по умолчанию для этой цепочки. Обычно таким действием делают DROP или REJECT, чтобы пропускать лишь пакеты, подошедшие под вполне определенные правила. В отличие от действия DROP в случае REJECT отправителю отсылается ICMP пакет с сообщением об ошибке. Это создает дополнительный трафик, но в соответствующих случаях приводит к тому, что отправитель перестает посылать нам пакеты (DROP выглядит для отправителя как таймаут, т.е. пакеты просто уходят и не приходит никакого подтверждения, а при REJECT он может посчитать, что наш компьютер недоступен или не существует).

Формат командной строки утилиты iptables:



iptables [-t table] command [match] [target/jump]

  • Каждая строка, которую вы вставляете в ту или иную цепочку, должна содержать отдельное правило.

  • Нигде не утверждается, что описание действия (target/jump) должно стоять последним в строке, мы, однако, будем придерживаться именно такой нотации для удобочитаемости.

  • то по умолчанию предполагается использование таблицы filter , иначе требуется указать имя таблицы [-t ]

  • за именем таблицы, должна стоять команда. Если спецификатора таблицы нет, то команда всегда должна стоять первой. Команда определяет действие iptables, например: вставить правило, или добавить правило в конец цепочки, или удалить правило и т.п.

  • match задает критерии проверки.

  • target указывает действие, которое должно быть выполнено при условии выполнения критериев в правиле

Пример rc.firewall с типичным набором правил:

#!/bin/sh


#Все сбросили

iptables -F

iptables -X COUNT
#Правила по умолчаниию

iptables -P INPUT DROP

iptables -P OUTPUT DROP

iptables -P FORWARD DROP


# разрешаем доступ к внутренней петле

iptables -A INPUT -i lo -j ACCEPT

iptables -A OUTPUT -o lo -j ACCEPT

#считаем все входящие пакеты ($$$)

#Создаем цепочку счетчиков

iptables -N COUNT

iptables -A INPUT -i eth0 -j COUNT
# Разрешаем ходить пакетам icmp

iptables -A INPUT -p ICMP -j ACCEPT

iptables -A OUTPUT -p ICMP -j ACCEPT
#Разрешаем соединения "запрошенные" с нашего компьютера. Избавляет от некоторых видов атак

iptables -A INPUT -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -A INPUT -p UDP -m state --state ESTABLISHED,RELATED -j ACCEPT

#Разрешаем пользовательские порты

iptables -A OUTPUT -p TCP --sport 32768:65535 -j ACCEPT

iptables -A OUTPUT -p UDP --sport 32768:65535 -j ACCEPT


#Разрешаем порты SMB для доступа Windows-машин к нашему серверу

# Smb Данныые

iptables -A INPUT -i eth1 -p TCP --dport 137:139 -j ACCEPT

iptables -A INPUT -i eth1 -p UDP --dport 137:139 -j ACCEPT

iptables -A OUTPUT -o eth1 -p TCP --sport 137:139 -j ACCEPT

iptables -A OUTPUT -o eth1 -p UDP --sport 137:139 -j ACCEPT

#Smb служба имен

iptables -A INPUT -i eth1 -p UDP --sport 137 --dport 32768:65535 -j ACCEPT


#Разрешаем видеть нас как ВЕБ-сервер

iptables -A INPUT -p TCP --dport 80 -j ACCEPT

iptables -A OUTPUT -p TCP --sport 80 -j ACCEPT
#Разрешаем видеть нас и как FTP -сервер

iptables -A INPUT -p TCP --dport 20:21 -j ACCEPT

iptables -A OUTPUT -p TCP --sport 20:21 -j ACCEPT
#Разрешаем изнутри забирать почту по протоколу POP3

#iptables -A INPUT -i eth1 -p TCP --dport 110 -j ACCEPT

iptables -A OUTPUT -o eth1 -p TCP --sport 110 -j ACCEPT
#Разрешаем обмен почтой по протоколу smtp

iptables -A INPUT -p TCP --dport smtp -j ACCEPT

iptables -A OUTPUT -p TCP --sport smtp -j ACCEPT
#Разрешаем DNS обмен

iptables -A INPUT -p UDP --dport domain -j ACCEPT

iptables -A OUTPUT -p UDP --sport domain -j ACCEPT
#Разрешаем доступ изнутри к прокси на порт 8080

iptables -A INPUT -i eth1 -p TCP --dport 8080 -j ACCEPT

iptables -A INPUT -i eth1 -p UDP --dport 8080 -j ACCEPT

iptables -A OUTPUT -o eth1 -p TCP --sport 8080 -j ACCEPT

iptables -A OUTPUT -o eth1 -p UDP --sport 8080 -j ACCEPT

#----------------------------------

#Секция счетчиков

iptables -A COUNT # Сколько всего пакетов

iptables -A COUNT -p icmp # Сколько ICMP пакетов

iptables -A COUNT -p tcp --dport smtp # Сколько напринимали спама по почте

iptables -A COUNT -j RETURN
iptables -L -v -x



    1. Шифрование и электронные подписи.

Метод шифровки/дешифровки называют шифром (cipher). Некоторые алгоритмы шифрования основаны на том, что сам метод шифрования (алгоритм) является секретным. Ныне такие методы представляют лишь исторический интерес и не имеют практического значения. Все современные алгоритмы используют ключ для управления шифровкой и дешифровкой; сообщение может быть успешно дешифровано только если известен ключ. Ключ, используемый для дешифровки может не совпадать с ключом, используемым для шифрования.

Алгоритмы с использованием ключа делятся на два класса: симметричные (или алгоритмы секретным ключом) и асиметричные (или алгоритмы с открытым ключом). Разница в том, что симметричные алгоритмы используют один и тот же ключ для шифрования и для дешифрования (или же ключ для дешифровки просто вычисляется по ключу шифровки). В то время как асимметричные алгоритмы используют разные ключи, и ключ для дешифровки не может быть вычислен по ключу шифровки.

Смметричные алгоритмы подразделяют на потоковые шифры и блочные шифры. Потоковые позволяют шифровать информацию побитово, в то время как блочные работают с некоторым набором бит данных (обычно размер блока составляет 64 бита) и шифруют этот набор как единое целое.

Ассиметричные шифры (также именуемые алгоритмами с открытым ключом, или --- в более общем плане --- криптографией с открытым ключом) допускают, чтобы открытый ключ был доступн всем (скажем, опубликован в газете). Это позволяет любому зашифровать сообщение. Однако расшифровать это сообщение сможет только нужный человек (тот, кто владеет ключом дешифровки). Ключ для шифрования называют открытым ключом, а ключ для дешифрования - закрытым ключом или секретным ключом.

Современные алгоритмы шифровки/дешифровки достаточно сложны и их невозможно проводить вручную. Настоящие криптографические алгоритмы разработаны для использования компьютерами или специальными аппаратными устройствами. В большинстве приложений криптография производится программным обеспечением и имеется множество доступных криптографических пакетов.

Цифровые подписи

Некоторые из асимметричных алгоритмов могут использоваться для генерирования цифровой подписи. Цифровой подписью называют блок данных, сгенерированный с использованием некоторого секретного ключа. При этом с помощью открытого ключа можно проверить, что данные были действительно сгенерированы с помощью этого секретного ключа. Алгоритм генерации цифровой подписи должен обеспечивать, чтобы было невозможно без секретного ключа создать подпись, которая при проверке окажется правильной.

Цифровые подписи используются для того, чтобы подтвердить, что сообщение пришло действительно от данного отправителя (в предположении, что лишь отправитель обладает секретным ключом, соответствующим его открытому ключу). Также подписи используются для проставления штампа времени (timestamp) на документах: сторона, которой мы доверяем, подписывает документ со штампом времени с помошью своего секретного ключа и, таким образом, подтверждает, что документ уже существовал в момент, объявленный в штампе времени.

Цифровые подписи также можно использовать для удостоверения (сертификации --- to certify) того, что документ принадлежит определенному лицу. Это делается так: открытый ключ и информация о том, кому он принадлежит подписываются стороной, которой доверяем. При этом доверять подписывающей стороне мы можем на основании того, что ее ключ был подписан третьей стороной. Таким образом возникает иерархия доверия. Очевидно, что некоторый ключ должен быть корнем иерархии (то есть ему мы доверяем не потому, что он кем-то подписан, а потому, что мы верим a-priori, что ему можно доверять). В централизованной инфраструктуре ключей имеется очень небольшое количество корневых ключей сети (например, облеченные полномочиями государственные агенства; их также называют сертификационными агенствами --- certification authorities). В распределенной инфраструктуре нет необходимости иметь универсальные для всех корневые ключи, и каждая из сторон может доверять своему набору корневых ключей (скажем своему собственному ключу и ключам, ею подписанным). Эта концепция носит название сети доверия (web of trust) и реализована, например, в PGP.



Gnupg

GnuPG (GNU Privacy Guard, «Страж безопасности GNU», или просто GPG) – это открытый эквивалент PGP (Pretty Good Privacy), известной и широкоиспользуемой программы для Windows, DOS и других операционных систем. Он распространяется в открытых исходниках и имеет те же самые функции, что и PGP, основанные на стандарте OpenPGP. У GnuPG есть несколько применений – он может использоваться либо для шифрования писем и файлов, либо для их цифровой подписи. Первый вариант применения GnuPG – шифрование писем и файлов на вашем жестком диске – очевиден, и он обычно применяется для защиты секретных сообщений или документов. Цифровая подпись информации необходима для сохранения целостности сообщений и файлов, особенно при передаче их через незащищенный канал. Она гарантирует, что: 1) Письмо было отправлено именно этим человеком, и 2) Что информация по пути не была изменена.

Gpg – консольная программа, однако известно множество оконных оболочек, делающих работу с ней еще проще. GPG основан на принципе открытых ключей (Public Key Infrastructure) – то есть, существуют 2 ключа: закрытый ключ используется для подписи и шифрования, а открытый ключ – для расшифровки и проверки правильности подписи.


  1. Порядок выполнения работы


Фильтрация пакетов в сетях.


    1. Создать таблицу фильтрации согласно варианту задания.

Шифрование и электронные подписи

    1. Создать пару ключей (публичный и секретный) для каждого из членов бригады. Вывести отпечатки (fingerprint) ключей.

Импортировать 2 публичных ключа преподавателя (ключи и электронные подписи на дискете преподавателя)

    1. Проверить отпечаток ключей, удалить неверный ключ.

    2. Подписать верный ключ преподавателя ключами членов вашей бригады.

    3. Создать файл с текстом, содержащим информацию о номере группы, номере бригады, фамилиях и инициалах членов бригады. Зашифровать его при помощи публичного ключа преподавателя. Подписать цифровой подписью одного из членов бригады, предоставить на проверку преподавателю.

    4. Проверить файлы с цифровой подписью (согласно варианту задания), выяснить: в каких файлах цифровая подпись нарушена.




  1. Содержание отчета




  1. Титульный лист.

  2. Цель работы.

  3. Текст файла rc.firewall, согласно пп. 1.1 .

  4. «Отпечатки» (fingerprint) каждого из ключей членов бригады.

  5. Цепочку сети доверия, согласно п.п. 3.5

  6. Имя, путь, размер файлов (исходного и зашифрованного) согласно п.п.3.6

  7. Информация из цифровых подписей файлов, согласно п.п. 3.7.



  1. Варианты заданий

Вариант 1






Входящие

Исходящие

Транзитные

Разрешить

  • http(80)

  • domain

  • ftp,ftp-data

  • icmp




  • http(80)

  • domain

  • ftp,ftp-data

  • icmp




Запретить

  • icmp c 192.168.1.2

  • c портов 20,21 192.168.1.2




  • tcp 365

  • udp 334




По умолчанию

запретить

разрешить

запретить

Счетчик- входящие icmp

Вариант 2






Входящие

Исходящие

Транзитные

Разрешить

  • http(80)

  • domain

  • smpt

  • ftp,ftp-data

  • icmp




  • http(80)

  • domain

  • smpt

  • icmp




Запретить

  • icmp c 192.168.1.7

  • c портов 17:30 192.168.1.2




  • tcp 3682

  • udp 16825




По умолчанию

запретить

разрешить

запретить

Счетчик- исходящие icmp

Вариант 3






Входящие

Исходящие

Транзитные

Разрешить

  • http(80)

  • domain

  • pop3

  • smtp

  • icmp

  • ftp,ftp-data

  • порты 2048:65535




  • http(80)

  • domain

  • smpt

  • pop3

  • icmp




Запретить

  • icmp c 192.168.1.7

  • c портов 17:30 192.168.1.2




  • tcp 3682

  • udp 16825




По умолчанию

запретить

разрешить

запретить

Счетчик- входящие icmp c адреса 192.168.1.1

Вариант 4




Входящие

Исходящие

Транзитные

Разрешить

  • ftp,ftp-data

  • domain

  • pop3

  • smtp

  • icmp

  • порты 2048:65535



  • ftp,ftp-data

  • smpt

  • pop3

  • icmp

  • порты 2048:65535






Запретить

  • icmp c 192.168.1.23

  • tcp на наш хост к портам 3312,2234

  • tcp 368:774

  • udp 334:1658




По умолчанию

запретить

запретить

разрешить

Счетчик- icmp, исходящие на 192.168.1.1

Вариант 5






Входящие

Исходящие

Транзитные

Разрешить

  • telnet

  • domain

  • ntp

  • smtp

  • icmp

  • ftp,ftp-data

  • 1024:65535




  • telnet

  • domain

  • ntp

  • smtp

  • icmp

  • 1024:65535




Запретить

  • icmp c 192.168.1.15/30

  • udp на наш хост к портам 1456,3333

  • tcp 368:774

  • udp 334:1658




По умолчанию

запретить

запретить

запретить

Счетчик- входящие UDP

Вариант 6






Входящие

Исходящие

Транзитные

Разрешить

  • ssh

  • domain

  • ftp,ftp-data

  • smtp

  • icmp

  • 1024:65535




  • Ssh

  • domain

  • ftp,ftp-data

  • smtp

  • icmp

  • 1024:65535




Запретить

  • icmp c 192.168.1.15/30

  • udp на наш хост к портам 1456,3333

  • tcp 368:774

  • udp 334:1658




По умолчанию

запретить

запретить

разрешить

Счетчик - исходящие UDP

Вариант 7






Входящие

Исходящие

Транзитные

Разрешить

  • ssh

  • domain

  • ftp,ftp-data

  • smtp

  • icmp

  • 2048:65535




  • Ssh

  • domain

  • ftp,ftp-data

  • smtp

  • icmp

  • 2048:65535




Запретить

  • Pop3 c 192.168.1.15/30

  • tcp на наш хост к портам 456,3128

  • tcp 222:774

  • udp 655:1658




По умолчанию

запретить

запретить

разрешить

Счетчик - исходящие smtp

Справочник команд



iptables

iptables [ключи] [-t table] command [match] [target/jump]

-t table – задает таблицу (см. таблицу 1)

Таблица 1 Типы таблиц firewall



Таблица

Назначение

цепочки

nat

Network Adderss Translation

PREROUTING

POSTROUTING



mangle

Изменяет заголовки пакетов

1. PREROUTING, POSTROUTING

2.INPUT,OUTPUT,

FORWARD


filter

Фильтрация пакетов

INPUT,OUTPUT,

FORWARD



command – команда (см. таблица 3)

Таблица 2 Команды



команда

пример

действие

-L, --list

iptables -L INPUT

Вывод всех правил

-A, --append

iptables -A INPUT

Добавляет новое правило в цепочку

-D, --delete

iptables -D INPUT --dport 80 -j DROP;

iptables -D INPUT 1



Удаление правила из цепочки

-R, --replace

iptables -R INPUT 1 -s 192.168.0.1 -j DROP

заменяет одно правило другим

-I, --insert

iptables -I INPUT 1 --dport 80 -j ACCEPT

Вставляет новое правило в цепочку. Номер-перед чем вставлять

-F, --flush

iptables -F INPUT

Сброс правил (если без указания цепочки - действует на все)

-Z, --zero

iptables -Z INPUT

Обнуление всех счетчиков в заданной цепочке

-N, --new-chain

iptables -N allowed

Создается новая цепочка с заданным именем в заданной таблице

-P, --policy

iptables -P INPUT DROP

Определяет политику по умолчанию для заданной цепочки. DROP, ACCEPT и REJECT.

-E, --rename-chain

iptables -E allowed disallowed

выполняет переименование пользовательской цепочки


ключи

Таблица 3 Ключи



Ключ

к команде

действие

--v, --verbose

--list, --append, --insert, --delete, --replace

Повышает информативность вывода

-x, --exact

--list

Выводятся точные значения (без округления)

-n,

--numeric



--list

Запрещает DNS разбор

--line-numbers

--list

Выводит line numbers


match – критерий

Таблица 4 Критерии проверки

Критерий

-p, --protocol

Пример

iptables -A INPUT -p tcp

Описание

Указывает тип протокола. tcp,udp,icmp,all. Логическая инверсия ‘!’

Критерий

-s, --src, --source

Пример

iptables -A INPUT -s !192.168.1.1/24

Описание

IP-адрес(а) источника пакета.

Критерий

-d, --dst, --destination

Пример

iptables -A INPUT -d 192.168.1.1

Описание

IP-адрес(а) получателя.

Критерий

-p, --protocol

Пример

iptables -A INPUT -p tcp

Описание

Указывает тип протокола. tcp,udp,icmp,all. Логическая инверсия ‘!’

Критерий

-s, --src, --source

Пример

iptables -A INPUT -s !192.168.1.1/24

Описание

IP-адрес(а) источника пакета.

Критерий

-d, --dst, --destination

Пример

iptables -A INPUT -d 192.168.1.1

Описание

IP-адрес(а) получателя.

Критерий

-i, --in-interface

Пример

iptables -A INPUT -i eth0

Описание

Интерфейс, с которого был получен пакет. Допускается только в цепочках INPUT, FORWARD и PREROUTING,. Если имя интерфейса завершается символом +, то критерий задает все интерфейсы, начинающиеся с заданной строки, например -i PPP+ обозначает любой PPP интерфейс, а запись -i ! eth+ -- любой интерфейс, кроме любого eth.

Критерий

-o, --out-interface

Пример

iptables -A FORWARD -o eth0

Описание

Задает имя выходного интерфейса.

Критерий

-f, --fragment

Пример

iptables -A INPUT -f

Описание

Правило распространяется на все фрагменты фрагментированного пакета, кроме первого.

Критерий

--sport, --source-port

Пример

iptables -A INPUT -p tcp --sport 22

Описание

Исходный порт, с которого был отправлен пакет. В качестве параметра может указываться номер порта или название сетевой службы, а также интервал: 22:80

Критерий

--dport, --destination-port

Описание

Порт назначения

Критерий

iptables -p tcp --syn

Описание

Блокирует попытки соединений.

Критерий

--tcp-option

Пример

iptables -p tcp --tcp-option 16

Описание

Опции пакета

Критерий

--sport, --source-port

Пример

iptables -A INPUT -p udp --sport 53

Описание

Исходный порт, с которого был отправлен пакет. В качестве параметра может указываться номер порта или название сетевой службы, а также интервал: 22:

Инверсия разрешена.



Критерий

--dport, --destination-port

Описание

Порт назначения

Критерий

--icmp-type

Пример

iptables -A INPUT -p icmp --icmp-type 8

Описание

Тип сообщения ICMP Тип сообщения ICMP определяется номером или именем. Числовые значения определяются в RFC 792. Чтобы получить список имен ICMP значений выполните команду iptables --protocol icmp --help.


Действие:
ACCEPT – принять

DROP- сбросить

REJECT – отклонить

LOG – запротоколировать




Gnupg – утилита PGP шифрования и создания электронных подписей

Генерация ключа:

[user@mdk]$ gpg --gen-key
Экспорт ключа:

gpg -armor --export email@ngs.ru > myopen.asc
Импорт ключа

Открытый ключ может быть добавлен к Вашей связке при помощи команды import:



gpg --import newkey.asc
Проверка отпечатка

Достоверность импортированного ключа должна быть подтверждена при помощи отпечатка:



gpg –fingerprint email@ngs.ru
Экспорт ключа на сервер ключей

Отпечатки ключа проверяются его владельцем.

можно сразу поместить ключ на сервер:

gpg --send-keys --keyserver wwwkeys.pgp.net email@ngs.ru
Подписывание ключа

gpg --edit-key new@mail.ru (переходит в командный режим)

sign
Посмотреть цепочку подписей:



gpg --list-sigs.
Создание электронной подписи:

gpg --clearsign -a test.file - создает подпись
Проверка электронной подписи

gpg --verify test.file.asc
Шифрование файла

gpg -ea –r email@ngs.ru test.file - зашифровать
Дешифрование файла

gpg -d test.file.asc >test.file расшифровать



Литература:


  • Руководство по Iptables Iptables Tutorial 1.1.14 http://www.linuxsecurity.com/resource_files/firewalls/IPTables- Tutorial/iptables-tutorial.html

  • Б.Шнайер. Прикладная криптография. Протоколы, алгоритмы, исходные тексты на языке Си.-М.:Издательство ТРИУМФ, 2002 - 816с.:ил.)

  • А. Салома Криптография с открытым ключом: М.Мир 1995- 318с.


База данных защищена авторским правом ©shkola.of.by 2016
звярнуцца да адміністрацыі

    Галоўная старонка