TCP/IP * Basics -- ip address, класове мрежи, CIDR (prefix, etc) !!!! NETMASK! Това винаги има нужда от внимателно обяснение -- специални адреси: -- 127.0.0.0/8 -- 10.0.0.0/8 , 172.16.0.0/12, 192.168.0.0/16 -- 169.254.0.0/16 -- link local адреси (за zeroconf, при липса на dhcp сървър и т.н.) -- multicast - 224.0.0.0/4 -- 24.0.0.0/8 - cable operators -- broadcast и network адреси -- как в общи линии изглежда header-а на пакета, основни полета: +-------------------------------------------------------------------------+ | 4 bit | 4 bit header| 8 bit Type of | 16 bit total length | | version | length | service (TOS) | | +----------+-------------+----------------+-----------+-------------------+ | 16 bit identification |3 bit |13 bit fragment | | | flags | offset | +--------------------+--------------------+-----------+-------------------+ | 8 bit time-to-live | 8 bit protocol | 16 bit header checksum | +--------------------+--------------------+-------------------------------+ | 32 bit source IP adress | +-------------------------------------------------------------------------+ | 32 bit destination IP adress | +-------------------------------------------------------------------------+ | options (ako ima takiva...) | +-------------------------------------------------------------------------+ | Data ................... | +-------------------------------------------------------------------------+ -- header length е в 32битови думи (по 4 байта), което ограничава опциите, които могат да се добавят -- total length е до 64k, но толкова големи пакети се ползват рядко (в мрежи с много голям bandwidth, основно оптични такива) !! - да не съм написал някоя голяма глупост, да проверя допълнително -- поле identification, неговия смисъл, и възможността да се броят различни машини зад NAT, като се базираме на него - http://www.research.att.com/~smb/papers/fnat.pdf -- опции на пакета -- security opcii, RFC 1108 - дефиниране на ниво на секретност на пакет -- Loose и Strict source routing, проблеми с тях -- по подразбиране не се пропускат от повечето router-и, и доста операционни системи директно ги игнорират -- record route/timestamp - дават възможност за записване на хостовете по пътя -- кратко обяснение за фрагментацията, как работи, каква и е целта, защо има MTU като идея -- unreliable packet transport -- Няма идеята за сигурност в протокола, има само reliability дотолкова, доколкото имаме header checksum, протоколите на по-ниско ниво трябва сами да си правят checksum и т.н. -- Пакет с грешна контролна сума се drop-ва, без да се върне грешка -- протоколът е оптимизиран много за скорост,т.е. за лесна работа на устройствата по пътя * UDP -- идея на проткола - протокол за пращане на отделни пакети, негарантиращ нищо -- кратко описание на header-а 0 7 8 15 16 23 24 31 +--------+--------+--------+--------+ | Source | Destination | | Port | Port | +--------+--------+--------+--------+ | | | | Length | Checksum | +--------+--------+--------+--------+ | | data octets ... +---------------- ... -- Атаки в/у протокола - поради липсата на sequence номера и т.н., се налага приложенията сами да се грижат за реда на пристигане на пакети и т.н., което създава предпоставки за проблеми * TCP -- идея на протокола - reliable stream -- кратко описание на header-а 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Source Port | Destination Port | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Sequence Number | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Acknowledgment Number | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Data | |U|A|P|R|S|F| | | Offset| Reserved |R|C|S|S|Y|I| Window | | | |G|K|H|T|N|N| | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Checksum | Urgent Pointer | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Options | Padding | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | data | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -- Флагове -- SYN, FIN, RST -- ACK -- URGENT, PSH -- sequence и ack. number -- TCP options -- timestamp -- кратко описание на отваряне и затваряне на връзка -- 3way handshake !! възможност за едновременно отваряне от 2те страни на връзка (simltaneous open) (в това има ли security проблеми,аз поне не мога да се сетя) -- sliding window, window scaling -- timeout and retransmission -- Протоколът е сложен, който се интересува, да чете допълнително, например TCP/IP Illustrated. * NAT and connection tracking(statefull firewalling) -- разликата м/у firewall и packet filter -- защо NAT не е истински firewall, а само добавка -- моменти при NAT на UDP * Multihomed hosts dilusions: достъп до един интерфейс на хост през другия * Spoofing -> (loose) uRPF, Administrative boundary filters RFC1918, RFC2827 -- защо трябва да филтрираме както входящите, така и изходящите пакети от нашата мрежа * Защо трябва да се пазим от spoofing част първа: Predictable IP (fragmentation) ID -> change your OS !! -- това какво беше, мътните го взели ? * Защо трябва да се пазим от spoofing част втора: Predictable TCP ISNs, link2, link 3 -> change your OS * Защо трябва да се пазим от spoofing част трета: DNS poisoning и DNS query id guessing -> Use securely-written DNS software * ICMP -- ping/pong -- "Time exceeded" (ttl expired in transit) -- ICMP source quench -- ICMP unreachables -- Fragmentation Needed and Don't Fragment was Set (packet too big, can't fragment) -- net/host/protocol/port -- others -- проблеми, създадени от лоша implementation , пример - windows, който реже връзката, ако получи dest/net unreachable -- ICMP redirects -- възможности за MITM (като проблемите с routing протоколите,то това практически си е допотопен динамичен routing) -- IRDP, timestamp req/rep, mask req/rep, information req/rep -- others * Classless, subnet zero -> enable, не са security риск, въпреки разпространяващите се слухове :) * Routing protocols: RIPv2, EIGRP, OSPF, IS-IS, BGP -> md5 authentication -- RIPv1 не поддържа никаква authentication, което от security гледна точка го прави невъзможен за използване -- RIPv2 използва стандартен начин за md5 checksum на пакета+таен ключ (налага се да се преровят няколко RFC-та, за да се намери описанието) -- RIP като идея вече не се използва -- глобално - трябва да има ACL кой за кои мрежи има право да дава информация -- OSPF използва същия механиъм за auth. на пакетите -- методът е глобален като идея за всички routing протоколи, работещи на пакети -- BGP -- кратко описание на протокола, понеже е доста важен -- AS(leaf, multihomed, transit, като хостовете), пътища, route around problems -- праща само updates -- защита на ниво TCP, MD5 опция на TCP header - всеки пакет се auth-ва. -- много рядко се използва, просто защото връзките м/у рутърите са преки. * HSRP, VRRP -> no real protection available (yet)! -- Това какво е, и ще говорим ли за него?