» Главная
eXcode.ru » Статьи » С / С++ » Linux
» Новости
» Опросы
» Файлы
» Журнал



Пользователей: 0
Гостей: 12





Netfilter Kernel Programming




Автор: devol

В этой статье я постараюсь дать начальные сведения о netfilter′e и о том, как предотвратить Land-подобную атаку с помощью написания модуля для ядра.

И так, netfilter - это подсистема фильтрации пакетов в ядрах ветки 2.4/6.x, он же - первый встроенный в ядро контекстный брэндмауер (Stateful Firewall). Контекстный брэндмауер отличается от обычного тем, что он может определять, является ли настоящий пакет частью какого-либо соединения. В частности, в TCP протокол встроена система трехэтапного квинтирования. Для этого клиент шлет серверу запрос на соединение, указав в хедере флаг syn, на что сервак отвечает ему таким же пакетом, но плюс к syn флагу он еще добавляет флаг ack, указывая тем самым, что он хочет с ним установить соединение, после согласия на это клиента. Ну, так вот, обычный брэндмауер не способен отличить пакет, который будет идти в этой сессии соединения или же это какой-либо другой пакет, владелец которого уже секунд 20 назад установил соединение. Зато контекстный брэндмауер определяет, относится ли этот пакет к нашему с ним соединению или же к другому, посмотрев для этого таблицу коннектов. Примерно таким же образом он обрабатывает и другие протоколы: UDP, ICMP, etc (смотри /etc/protocols). В частности, такой тип брэндмауеров используется в Cisco. Ну да ладно, много интересного об архитектуре и особенностях netfilter′a вы можете узнать, поботав доки с www.netfilter.org.

А теперь поговорим о том, как же нам запрогать netfilter. Он способен перехватывать пакеты следующих сетевых стеков: IPv4, IPv6, DECnet. Мы рассмотрим только IPv4. Для данного стека в хереде /usr/include/linux/netfilter_ipv4.h определены следующие возможные значения захвата IP-пакетов (так называемые хуки):

0.NF_IP_PRE_ROUTING: решаем, что делать с пакетом на входе.
1.NF_IP_LOCAL_IN: входящий, для нашего компа.
2.NF_IP_FORWARD: если пакет предназначен для другого интерфейса.
3.NF_IP_LOCAL_OUT: если этот пакет создан локально.
4.NF_IP_POST_ROUTING: решаем что делать с пакетом на выходе.

Перед тем, как к нам прилетит пакет, вызывается NF_IP_PRE_ROUTING хук. Далее вызывается функция, которая и решит, что мы сделаем с пакетом. Эти функции определены в /usr/include/linux/netfilter.h:

0.NF_DROP: отбросить пакет.
1.NF_ACCEPT: пропустить на дальнейшую обработку.
2.NF_STOLEN: запомнить этот пакет в понятии котекстного брандмауера.
3.NF_QUEUE: поставить пакет в очередь.
4.NF_REPEAT: вызвать эту функцию повторно.

Структура объявления хуков определена в /usr/include/linux/netfilter.h:

struct nf_hook_ops
{
/* член списка этой структуры используется для поддержки списка хуков
netfilter′a и он не несет никакой смысловой нагрузки на регистрацию хука */
struct list_head list;
/* укаказатель на хук-функию, см.выше */
nf_hookfn *hook;
/* какое семейство протоколов будем использовать. Так как мы обусловились
работать со стеком IPv4, то посмотрев хедер /usr/include/linux/socket.h,
узнаем что это PF_INET */
int pf;
/* какой из хуков мы будем использовать, см.выше */
int hooknum;
/* каждому хуку можно назначить свой приоритет, для нашего стека см. файл
/usr/include/linux/netfilter_ipv4.h */
int priority;
};

Теперь же, чтобы зарегистрировать хук, нам понадобиться функция nf_register_hook, прототип которой определен в файле /usr/include/linux/netfilter.h.

int nf_register_hook(struct nf_hook_ops *reg);

В качестве аргумента эта функция принимает выше обозначенную структуру. Для определения данных, которые передаются в хук-функцию, используется прототип nf_hookfn, который определен в том же хедере:



typedef unsigned int nf_hookfn(unsigned int hooknum,
struct sk_buff **skb,
const struct net_device *in,
const struct net_device *out,
int (*okfn)(struct sk_buff *));



Здесь первый аргумент - это номер хука, а второй - указатель на указатель на sk_buff структуру, которая определена в /usr/include/linux/skbuff.h хедере. Это нужно для того, чтобы ядро знало, с какими пакетами мы работаем. Следующие два аргумента - это указатели на net_device структуру, определенную в /usr/include/linux/netdevice.h. Они используются для того, чтобы ядро знало, что за интерфейс мы используем (eth0, tap0, lo, etc). In и Out, соответственно, входящий и исходящий интерфейсы. В частности, in будет осуществлен для NF_IP_PRE_ROUTING и NF_IP_LOCAL_IN, а out - для NF_IP_POST_ROUTING и NF_IP_LOCAL_OUT хуков. Последний аргумент - функция, которая в качестве аргумента опять же принимает структуру sk_buff. Эта функция нужна, чтобы зря не расходовать процессор ожиданием пакета, который поставлен в очередь с помощью функции NF_QUEUE.

Так как все основные определения я уже дал, остается зашарить в ядерном написании модулей. Для этой цели поботайте статейки dev0id′a о "Linux Kernel Modules". Все, теперь я предоставлю исходник нашего фильтра пакетов, который будет обнаруживать пакеты, которые шлются при Land-атаке, т.е. где порт и IP атакуемого сервера совпадают с портом и IP этого же сервера (т.е. source=destination ip/port).



/* хедеры */
#define __KERNEL__
#define MODULE
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/netdevice.h>
#include <linux/netfilter.h>
#include <linux/netfilter_ipv4.h>
/* структура, которую мы будем использовать для регистрации нашей функции */
static struct nf_hook_ops nfho;

/* интерфейс, который мы используем */
static char *drop_if = "eth0";
/* тут указываем наш ip-адрес, в данном случае 192.168.168.1 */
static unsigned char *drop_ip = "xc0xa8xa8x01";
/* порт. Укзываем пока что один открытый 80-ый порт, но реально дописать программу,
которая будет отслеживать все открытые TCP/UDP-порты */
unsigned char *deny_port = "x00x50";


/* это наша хук-функция */
unsigned int hook_func(unsigned int hooknum,
struct sk_buff **skb,
const struct net_device *in,
const struct net_device *out,
int (*okfn)(struct sk_buff *))
{
struct sk_buff *sb = *skb;
struct tcphdr *port;
port = (struct tcphdr *)(skb->data + (skb->nh.iph->ihl * 4));
if ((strcmp(in->name, drop_if) == 0) &&
(sb->nh.iph->saddr == drop_ip) &&
((skb->nh.iph->protocol != IPPROTO_TCP) ||
(skb->nh.iph->protocol != IPPROTO_UDP)) &&
((port->dest) == *(unsigned short *)deny_port))
{
printk("Packet dropped...");
return NF_DROP;
}else{
return NF_ACCEPT;
}
}

/* сандартная функция инициализации */
int init_module()
{
nfho.hook = hook_func;
nfho.hooknum = NF_IP_PRE_ROUTING;
nfho.pf = PF_INET;
nfho.priority = NF_IP_PRI_FIRST;

nf_register_hook(&nfho);

return 0;
}

/* стандартная функция удаления модуля */
void cleanup_module()
{
nf_unregister_hook(&nfho);
}



Ну вот собственно и все, что я хотел рассказать в этой вводной статье. Ботайте физику и, физтех - рулез!

Основные источники:
[0] http://netfilter.org
[1] http://lists.netfilter.org/pipermail/netfilter-devel/
[2] http://www.geocities.com/victorhugo83/
[3] http://www.linuxsecurity.com/feature_stories/kernel-netfilter.html

[c] devol aka cl1mp3x, (XFree86@mail.ru).
К началу статьи





Добавил: MadvEXДата публикации: 2005-10-09 12:16:00
Рейтинг статьи:3.00 [Голосов 5]Кол-во просмотров: 7228

Комментарии читателей

Всего комментариев: 138

2018-12-04 18:43:21
Frankseink
Приветствую всех! класный у вас сайт!
Нашел класную базу кино: <b> лучшие новые мультфильмы онлайн </b> <a href=http://inspacefilm.ru/>http://inspacefilm.ru/</a>
Тут: <a href=http://inspacefilm.ru/fentezi/>читать лучшее фэнтези онлайн бесплатно</a> лучшие фэнтези 720 онлайн список 2018
Здесь: <a href=http://inspacefilm.ru/drama/>Сериалы 2018 зарубежные драмы</a> драмы смотреть хорошем качестве список 2018
Здесь: Лучшие документальные фильмы смотреть http://inspacefilm.ru/dokumentalnyy/ список 2018
Здесь: http://inspacefilm.ru/detektiv/8642-trassa-2013.html <b> Смотреть Трасса (2013) онлайн бесплатно </b>
Тут: http://inspacefilm.ru/komediya/8868-deckaya-bolnica-detskaya-bolnica-childrens-hospital-sezon-1-6-2008-2015.html

2018-11-25 12:27:00
Hectorsooks
Здравствуйте! прикольный у вас сайт!
Нашел прикольную базу кино: <a href=http://kinokub.net/>лучшие сериалы мелодрамы русские онлайн бесплатно</a>
Здесь: лучшие исторические фильмы онлайн http://kinokub.net/istoricheskiy/ список 2018
Здесь: <a href=http://kinokub.net/kriminal/>Смотреть онлайн лучшие криминальные фильмы</a> Лучшие криминальные фильмы смотреть онлайн список 2019
Здесь: <a href=http://kinokub.net/multfilmy/>русалочка смотреть онлайн мультфильм в хорошем качестве</a> фильмы мультфильмы бесплатно в хорошем качестве список 2018
Тут: http://kinokub.net/news/10826-ostalos-tri-pretendenta-na-rol-molodogo-hana-solo.html <b> Осталось три претендента на роль молодого Хана Соло </b>
Здесь: <a href=http://kinokub.net/news/13079-shayya-labef-arestovan-v-dzhordzhii.html> Шайя ЛаБеф арестован в Джорджии </a> Шайя ЛаБеф арестован в Джорджии
Тут: http://kinokub.net/news/3953-cbs-zakazal-novyy-serial-po-stivenu-kingu.html

2018-11-25 06:31:41
Tommienug
Привет всем участникам! прикольный у вас сайт!
Нашел русскую базу кино: <b> смотреть комедии 2018 года в хорошем качестве </b> <a href=http://kinovalenok.tv/>http://kinovalenok.tv/</a>
Тут: кино фэнтези смотреть бесплатно в хорошем качестве http://kinovalenok.tv/fentezi/ список 2018
Тут: <a href=http://kinovalenok.tv/drama/>смотреть лучшие драмы онлайн бесплатно</a> смотреть лучшие драмы список 2019
Тут: <a href=http://kinovalenok.tv/dokumentalnyy/>документальные фильмы хорошего качества бесплатно</a> документальные фильмы список 2019
Здесь: http://kinovalenok.tv/news/10848-robert-dauni-ml-gotov-sygrat-v-chetvertom-zheleznom-cheloveke.html <b> Роберт Дауни мл. готов сыграть в четвертом "Железном человеке" </b>
Здесь: http://kinovalenok.tv/detektiv/11454-sherlok-sherlock-sezon-1-5-2010-2016.html

2018-11-16 10:17:13
proref
Мы можем предложить очень качественные услуги прокси-серверов пакетами. Вам требуется стабильный частный прокси для работы в Instagram, Вконтакте,Однокласниках или Авито? Вы интересуетесь букмекерскими ставками или покером? SEO,SMM, по настоящему безопасный серфинг либо другие темы? Тогда вы по нужному адресу.


Мы можем предложить анонимные, элитные, прокси-сервера с надежной круглосуточной поддержкой. Все наши прокси могут применяться для различных программ,сервисов, социальных сетей, онлайн игр и не только. Авторизация по логин - паролю или IP адресу.


Быстрые прокси ipv4 и ipv6 (до 100 мбит/с) гарантируют стабильную работу. Нужны различные подсети, у нас их достаточно. Так же вы можете выбрать тип протокола HTTP/SOCKS.



<a href=https://proxywhite.com/>ipv4 купить</a>

2018-10-23 16:25:00
kolyasMainy
Всем привет... уважаемые форумчане подборка полезной информации <a href=http://mamaimalysh.com.ua/category/kolyaski-trosti-geoby>каляскі</a> К сожалению, Ваш браузер не поддерживает современные технологии используемые на нашем сайте.Экономия времени, Большой ассортимент, Возможность сравнить модели, Доставка заказа на дом, Без очередей на кассе и назойливого персонала, Трансформеры, Прогулочные модели, Для новорожденных, Модели 2 в 1, Модели 3 в 1, Универсальные, Автокресла, Разнообразные аксессуары.Вопрос тарификации и стоимости отправки коляски в регионы определяется индивидуально в соответствии с четко прописанными правилами.

2018-10-21 19:55:35
Lancetip
Всем привет!
Нашел прикольные фотки на этом сайте: http://okaybro.ru :
<a href=http://okaybro.ru/foto-prikoly-interesnoe/876-poezd-v-yugo-vostochnoy-azii.html> Поезд в Юго-Восточной Азии </a>
<b> Невероятно дешевые райские места, где можно начать новую жизнь </b> http://okaybro.ru/foto-prikoly-interesnoe/4385-neveroyatno-deshevye-rayskie-mesta-gde-mozhno-nachat-novuyu-zhizn.html
http://okaybro.ru/foto-prikoly-interesnoe/3390-fotograf-charlotte-rutherford.html

2018-10-21 06:00:51
RobertRup
Только в 27 из 84 жилых комплексах массового сегмента «старой» Москвы на сегодняшний день доступны ипотечные программы без первоначального взноса, подробности смотрите на сайте <a href=http://vuloff-zen.ru>http://vuloff-zen.ru</a>

2018-10-19 01:02:43
ConnieIntiz
Привет всем! класный у вас сайт!
Нашел сериальную базу кино: <b> Список аниме </b> <a href=http://kinokub.net/>http://kinokub.net/</a>
Тут: <a href=http://kinokub.net/fantastika/>лучшая фантастика 2018 года смотреть бесплатно</a> смотреть фантастику про космос в хорошем качестве список 2017
Здесь: лучшие комедии онлайн бесплатно http://kinokub.net/komediya/ список 2018
Здесь: смотреть самые лучшие мелодрамы 2018 http://kinokub.net/melodrama/ список 2018
Тут: http://kinokub.net/drama/2160-anatomiya-grey-anatomiya-strasti-greys-anatomy-sezon-9-2012.html <b> Смотреть Анатомия Грей / Анатомия страсти / Greys Anatomy (Сезон 9) (2012) онлайн бесплатно </b>
Тут: http://kinokub.net/komediya/1906-kak-ya-vstreil-vatshu-mamu-how-i-met-your-mother-sezon-8-2012.html

2018-10-18 11:00:57
Rolandswark
Привет всем участникам!
Нашел интересные фотоподборки на этом сайте: http://himaan.ru :
http://himaan.ru/foto-prikoly-interesnoe/4482-raketa-nositel-energiya-m-i-ee-poslednee-zhilische.html <b> Ракета-носитель Энергия-М и её последнее жилище </b>
<a href=http://himaan.ru/foto-prikoly-interesnoe/515-fakty-o-severnoy-koree.html> Факты о Северной Корее </a>
http://himaan.ru/foto-prikoly-interesnoe/4245-40-citat-ot-korolya-sarkazma-doktora-hausa.html

2018-10-17 13:11:33
RobertRup
Только в 27 из 84 жилых комплексах массового сегмента «старой» Москвы на сегодняшний день доступны ипотечные программы без первоначального взноса, подробности смотрите на сайте <a href=http://vuloff-zen.ru>http://vuloff-zen.ru</a>
Ваше имя: *
Текст записи: *
Имя:

Пароль:



Регистрация

Что для вас важнее в ПО
Его размер
7% (9)
Его цена
7% (8)
Его простота и доступность
17% (20)
Его функциональность
64% (77)
Наличие дополнительных фич
0% (0)
Наличие русского языка
5% (6)
Графицеский интерфейс
1% (1)
Изготовитель
0% (0)

Проголосовало: 121
Познакомились в Интернете парень и девушка, подружились по переписке. Решили встретиться. Договорились о месте и времени. Он спрашивает:
- А как я тебя узнаю?
- Я буду во всем салатовом.
Парень пришел на место и издали, на всякий случай, высматривает девушку в салатовом платье. Вдруг видит: барышня в салатовом, весом килограммов 150. На другой день общаются в Чате. Она:
- Ну что же ты не пришел?
- Я пришел, но не подошел.
- Почему?
- А я подумал, что на твой салат у меня майонеза не хватит.
Рейтинг: 5.3/10 (3)
Посмотреть все анекдоты