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



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





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]Кол-во просмотров: 7490

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

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

2019-03-10 05:30:24
Robertpon
Всем привет! интересный у вас сайт!
Нашел интересную базу кино: <a href=http://kinobibly.ru/>смотреть бесплатно лучшую ужасы 2018</a>
Тут: смотреть фантастику онлайн в хорошем качестве hd http://kinobibly.ru/fantastika/ список 2018
Тут: <a href=http://kinobibly.ru/komediya/>фильмы 2019 смотреть хорошем качестве русские комедии</a> русские комедии новинки смотреть в хорошем качестве рейтинг 2018
Здесь: <a href=http://kinobibly.ru/melodrama/>смотреть мелодраму домработница в хорошем качестве</a> самый лучший мелодрамы фильм смотреть рейтинг 2019
Тут: http://kinobibly.ru/11287-zhan-klod-van-damm-ustroil-skandal-v-pryamom-efire.html Жан-Клод Ван Дамм устроил скандал в прямом эфире
Тут: Человек дождя / Rain Man (1988) <a href=http://kinobibly.ru/10122-chelovek-dozhdya-rain-man-1988.html> Человек дождя / Rain Man (1988) </a>
Здесь: http://kinobibly.ru/2574-atomnyy-vek-atomnyy-vozrast-lage-atomique-atomic-age-2012.html

2019-01-31 21:58:58
MalyCoupt
Доброе время суток!!Отличная подборка информации для Вас <a href=http://mamaimalysh.com.ua/product/koljaska_2_v_1_tako_roxie_gepard>типа такого такая</a> если Вы ищите многофунциональное обучающее устройство на базе мобиля на кроватку , то это не к нам.на ней расположены кнопки с различными звуками: животных, гудка, колокольчика, веселой мелодии.

2019-01-28 15:47:57
PhillipMet
Всем привет! класный у вас сайт!
Нашел прикольную базу кино: <a href=http://kinovalenok.tv/>смотреть сериал хороший парень 2018</a>
Тут: <a href=http://kinovalenok.tv/fantastika/>фантастика 2018 онлайн хорошем качестве</a> Бесплатно лучшие фантастика рейтинг 2018
Здесь: <a href=http://kinovalenok.tv/komediya/>молодежные комедии бесплатно в хорошем качестве</a> комедия 2018 список лучших смотреть онлайн список 2019
Здесь: Новинки смотреть онлайн лучшие мелодрамы http://kinovalenok.tv/melodrama/ рейтинг 2018
Здесь: http://kinovalenok.tv/2065-griffiny-family-guy-sezon-7-2008-2009.html <b> Смотреть Гриффины / Family Guy (Сезон 7) (2008-2009) онлайн бесплатно </b>
Здесь: <a href=http://kinovalenok.tv/13136-akcii-amerikanskih-setey-kinoteatrov-ruhnuli.html> Акции американских сетей кинотеатров рухнули </a> <b> Акции американских сетей кинотеатров рухнули </b>
Тут: http://kinovalenok.tv/10711-shon-levi-snimet-rimeyk-filma-chelovek-so-zvezdy.html

2019-01-27 14:29:17
KennethWes
<a href=></a>

<a href=><img src=""></a>

<a href=></a>

<a href=><img src=""></a>
<a href=></a>

<a href=></a> - Алкоголь в канистрах в спб.
<a href=><img src=""></a>

2019-01-27 10:32:23
KennethWes
<a href=></a>

<a href=><img src=""></a>

<a href=></a>

<a href=><img src=""></a>
<a href=></a>

<a href=></a> - Алкоголь в канистрах в спб.
<a href=><img src=""></a>

2019-01-23 23:47:09
KeithLax
Здравствуйте! Класный у вас сайт!
Что думаете по этим новостям?:
http://itcyber.ru/12484-mid-rossii-zavel-akkaunt-v-instagram.html МИД России завел аккаунт в Instagram
<a href=http://itcyber.ru/11625-predstavlen-igrovoy-treyler-the-division-s-preimuschestvami-pc-grafiki.html> Представлен игровой трейлер The Division с преимуществами PC графики </a> <b> Представлен игровой трейлер The Division с преимуществами PC графики </b>
<a href=http://itcyber.ru/information-technology-it/>информационные системы и технологии</a> об информации информационных технологиях и защите информации
<a href=http://itcyber.ru/games/>игры на мобильных</a> влиЯние компьютерных игр
Ещё много интересного нашел тут: <b> Свежие новости IT </b> http://itcyber.ru/

2019-01-22 09:50:08
MichaelBiots
Привет всем участникам форума!
Нашел интересные новости на этом сайте: http://himaan.ru :
<a href=http://himaan.ru/prikoli_umor/>приколы года смех до слез</a> картинки с юмором
девушки в красивом белье http://himaan.ru/krasivye_devushki/
http://himaan.ru/1261-zhivye-fotografii-zhulena-duve.html <b> Живые фотографии Жульена Дувье </b>
http://himaan.ru/9075-interesnye-podvodnye-snimki-lorana-farzhe.html

2019-01-22 01:53:51
KennethWes
<a href=>водка премиум в канистрах 5 литров в санкт петербурге</a>
Другое дело ? продажа алкоголя в канистрах. Это работает. Оказывается, в городе действует целая индустрия по продаже "качественных", как уверяют, напитков прямо с заводов. Минимальный размер розничной партии ? одна пятилитровая канистра стоимостью от 700 до 1200 рублей. На выбор предлагают водку, коньяк, абсент, текилу, виски.
<a href=><img src="http://relaxtravel.ru/uploads/posts/2012-07/1343230973_strana-konyakov_thumb.jpg"></a>
Звоню и спрашиваю, откуда берется алкоголь? Выносят с завода. А причем тут абсент, если его в России ни на одном заводе не выпускают? Нет, отвечают, еще как выпускают, такой завод есть где-то на границе с Финляндией. Подпольный или нет? Да я не в курсе, говорит продавец, я только продаю. Если не верите, приезжайте, я вам дам несколько глотков на пробу, и тогда решите, нужно ли заказывать канистру. Главное, что народу нравится, жалоб пока не было.
<a href=>канистры с алкоголем спб</a>
А ночью, спрашиваю, продаете? Ночью, отвечают, мы спим.
<a href=><img src="http://drive-transport.ru/vybrat-konjak/imgs/26113060-kuplyu-konyak-optom.jpg"></a>
<a href=>спирт спб</a>
Все равно записала телефон в записную книжку. Если будет утром гореть душа, позвоню. Пятилитровой канистры мне надолго хватит.
<a href=>спирт спб</a> - Алкоголь в канистрах в спб.
<a href=><img src="http://construktors.ru/kupit-konyak-la/imgs/12959562-luchshiy-konyak-rossiyskogo-proizvodstva.jpg"></a>
В петербургском управлении Антимонопольной службы подтвердили, что с незаконной рекламой незаконной продажи алкоголя они борются, но за пять лет им ни разу не приходилось преследовать интернет-торговцев. Но как это делается, рассказали.

2019-01-21 14:07:12
KennethWes
<a href=>спирт в канистрах 5 литров</a>
? Раньше покупал иногда там бутылку вина. Но с тех пор как ввели ограничение, винный отдел стали после одиннадцати закрывать. И я, соответственно, перестал делать там алкогольные покупки. И вот как-то подходит ко мне администратор и говорит:
<a href=><img src="http://born2invest.com/cdn/wp-content/uploads/2015/02/110-590x332.jpg"></a>
? Уважаемый Иван Иваныч (на самом деле имя-отчество другое ? это придумано для конспирации), что же вы вино у нас перестали покупать?
<a href=>коньяк в канистре 5 литров купить</a>
? Так не успеваю я до 23 часов к вам доехать.
<a href=><img src="http://www.by.all.biz/img/by/catalog/60543.jpeg"></a>
<a href=>алкоголь интернет магазин санкт петербург</a>
? Какой ужас! Но мы посоветовались с руководством и решили только для вас пойти на небольшие поблажки.
<a href=>алкоголь интернет магазин санкт петербург</a> - Алкоголь в канистрах в спб.
<a href=><img src="http://images.ru.prom.st/40298807_w640_h640_1.jpg"></a>
Уважаемому покупателю стали в индивидуальном порядке и после 23 часов открывать винный отдел. Он выбирает бутылку, оплачивает покупку наличными, а чек ему пробивают утром ? он, правда, чек все равно никогда не забирает.

2019-01-18 12:48:12
Kennetharils
Привет!
Нашел прикольные новости на этом сайте: http://limonos.ru :
архитектура зданий http://limonos.ru/arhitektura/
<a href=http://limonos.ru/krutye_tachki_mashiny/>самые крутые марки автомобилей</a> крутые тачки
http://limonos.ru/4818-kak-alkogol-menyaet-nashe-povedenie.html <b> Как алкоголь меняет наше поведение? </b>
<a href=http://limonos.ru/1172-novaya-russkaya-zabava.html> Новая русская забава </a> <b> Новая русская забава </b>
http://limonos.ru/1454-kak-mozhet-rabotat-shinomontazh-ili-pit-stopy-v-formule-1.html
Ваше имя: *
Текст записи: *
Имя:

Пароль:



Регистрация

Каким почтовым клиентом вы пользуетесь?
Мышью
51% (83)
MS Outlook / Outlook Express
15% (25)
Eudora
0% (0)
Thunderbird
7% (12)
Веб-интерфейсом
20% (33)
Почта России
6% (9)

Проголосовало: 162
Чайник со свистком - это милиционер за компьютером.
Рейтинг: 7.3/10 (7)
Посмотреть все анекдоты