Jacek Skowyra Juniper Routers Security
description
Transcript of Jacek Skowyra Juniper Routers Security
Zabezpieczenie routerów Juniper przed światem zewnętrznym
Jacek Skowyra
Agenda
˥ Dostęp fizyczny
˥ Data Plane
˥ Control Plane
˥ Zarządzanie
˥ Filtry
Agenda
Dostęp fizyczny - zabezpieczenie konsoli
˥ Jedyny domyślny dostęp w „nowym” urządzeniu
˥ Wiszące sesje
˥ Odzyskiwanie hasła
set system ports console log-out-on-disconnect
set system ports console insecure set system root-authentication encrypted-password " “ set system ports console disable
Dostęp fizyczny - zabezpieczenie portu aux
˥ Domyślnie zablokowany
˥ Może być użyty jako dodatkowy port konsoli
set system ports disable
set system ports insecure
Dostęp fizyczny - zabezpieczenie portu diagnostycznego
˥ SCB, SSB, SFM, FEB
˥ Brak hasła
set system diag-port-authentication plain-text-password
set system pic-console-authentication plain-text-password
Craft terminal T320 LCD Display EX4200 Reset button J2350
Dostęp fizyczny - zabezpieczenie craft terminala
˥ Oglądanie statusu
˥ Przywracania konfiguracji domyślnej
˥ Włączanie/wyłączanie FPC/PIC
set chassis craft-lockout
set chassis config-button no-clear
set chassis config-button no-rescue
Dostęp fizyczny - zabezpieczenie LCD
˥ Power, environment, version
˥ Halt, reboot, rescue-config, factory-default
show chassis lcd-menu
set chassis lcd-menu fpc 0 menu-item „status-menu show-version” disable
set chassis lcd-menu fpc 0 maintance-menu disable
Rodzaje pakietów:
˥ Pakiety przełączane
˥ Pakiety nie wymagające obróbki przez RE
Router Pakiety przełączane
Routing Engine
FIB Interfejs
wyjściowy
Interfejs
wejściowy
Rodzaje pakietów:
˥ Pakiety skierowane do urządzenia
˥ Pakiety, których adresem docelowym jest urządzenie (zarządzanie, routing). Wymagają obsługi przez procesor
Router Pakiety przełączane Pakiety skierowane do urządzenia
Routing Engine
FIB Interfejs
wyjściowy
Interfejs
wejściowy
Rodzaje pakietów:
˥ Pakiety niestandardowe
˥ Pakiety IPv4, IPv6 posiadające ustawione opcje w nagłówku
˥ Pakiety z wygasającym TTL
Router Pakiety przełączane Pakiety skierowane do urządzenia Pakiety niestandardowe
Routing Engine
FIB Interfejs
wyjściowy
Interfejs
wejściowy
DROP
Rodzaje pakietów:
˥ Pakiety inne niż IP
˥ PPP LCP, pakiety ISIS (CLNS), L2 keepalive
Router Pakiety przełączane Pakiety skierowane do urządzenia Pakiety niestandardowe Pakiety inne niż IP
Routing Engine
FIB Interfejs
wyjściowy
Interfejs
wejściowy
DROP
Data plane
˥ Filtry firewall’a
˥ uRPF
˥ IP header
Data plane – filtry firewall’a
˥ Podstawowa metoda sprawdzania przesyłanych danych
˥ Filtry mogą być umieszczane na wejściu jak i na wyjściu interfejsu
˥ Każdy filtr składa się z jednego lub więcej segmentu
˥ Na końcu każdego filtra znajduje się domyślna akcja DENY
Data plane – filtry firewall’a
filter filter-name {
term term-name {
from {
match-conditions;
}
then {
action;
nonterminating-actions;
}
}
term implicit-rule {
then discard;
}
}
set interfaces ge-0/0/0 unit 0 family inet filter input filter-name
Data plane – unicast RPF
˥ Filtrowanie pakietów wejściowych o nieprawidłowych adresach źródłowych
˥ Używa FIB’a do sprawdzania adresów źródłowych dzięki czemu jest niezależny od zmian w routingu
˥ Możliwe dwa tryby pracy: strict oraz loose
Data plane – unicast RPF
˥ uRPF Strict
˥ Adres źródłowy musi być w tablicy routingu
˥ Adres źródłowy musi być osiągalny przez interfejs wskazany w tablicy routingu, jako interfejs przez który jest osiągalna najkrótsza ścieżka do danego adresu źródłowego
˥ Domyślny tryb
set interface ge-0/0/0 unit 5 family inet rpf-check <fail-filter filter-name>
˥ uRPF Loose
˥ Adres źródłowy musi być w tablicy routingu
˥ Adres źródłowy musi być osiągalny przez dowolny interfejs
set interface ge-0/0/0 unit 5 family inet rpf-check <fail-filter filter name> mode loose
Data plane – IP header options
˥ RFC 791 – każde urządzenie obsługujące protokół IP, musi wspierać pole IP Option
˥ Wymaga obsługi przez procesor
˥ Zastosowanie dzisiaj
˥ RSVP
˥ IGMP 2, 3
Control plane
˥ Control plane (RE) odpowiada za procesowanie wielu różnych typów pakietów:
˥ pakiety routingowe
˥ pakiety z ustawionymi ip options
˥ pakiety L2
˥ Control plane odpowiada także np. za obsługę CLI
˥ Każdy control plane ma skończoną ilość mocy procesora czy pamięci
Control plane – ochrona
˥ Blokowanie niepotrzebnych usług
˥ Policing
˥ MD5
Control plane – blokowanie niepotrzebnych usług
˥ IP Source Routing ˥ Umożliwia wysyłającemu pakiet ustawienie ścieżki po której ma się on poruszać (strict)
lub określenie pojedyńczego routera, przez który pakiet musi przejść
˥ Od wersji junos 8.5 wyłączony standardowo
set chassis no-source-route
˥ IP Directed Broadcast ˥ Umożliwia wysyłanie pakietu do adresu broadcast danej podsieci
˥ Wyłączony, można włączyć per interfejs
˥ Proxy ARP ˥ Router odpowiada na zapytania ARP w imieniu innych urządzeń
˥ Wyłączony, można włączyć per interfejs
˥ Default ARP Policer ˥ Junos posiada policer na pakiety ARP przesyłane do RE
˥ Dodatkowe ogracznienia dla arp’ów mogą być wprowadzanie per interfejs
Control plane – policing
˥ Blokowanie pakietów niepożądanych
˥ Pakiety pofragmentowane
˥ Pakiety z sieci o ograniczonym zaufaniu
˥ Zezwolenie na wymagane pakiety ˥ Protokoły routingu (ospf, bgp, isis)
˥ Serwisy (ssh, telnet)
˥ Zarządzanie (snmp, ntp, dns)
˥ Diagnostyka (icmp, traceroute)
˥ Ograniczenie pozostałych pakietów ˥ Rate limit ICMP, TCP, UDP
Control plane – MD5, IPSec
˥ Oprócz statycznej definicji sąsiadów w poszczególnych protokołach, dodatkowa weryfikacja za pomocą hash MD5
˥ Protokoły wykorzystujące MD5
˥ NTP
˥ BGP
˥ ISIS
˥ OSPF
˥ RIP
˥ LDP
˥ OSPFv3 IPSec SA
Zarządzanie
˥ Zarządzanie użytkownikami
˥ Zdalny dostęp do routera
˥ SNMPv2, v3
˥ Syslog
˥ NTP
˥ Niezabezpieczone usługi
˥ Zabezpieczone usługi
Zarządzanie użytkownikami
˥ Radius, Tacacs+
˥ Lokalna baza użytkowników
˥ Klasy użytkowników
Radius set system radius-server 10.10.10.1
set system radius-server 10.10.10.1 secret $lk2#&sf
set system radius-server 10.10.10.1 port 1812 (domyślny)
set system radius-server 10.10.10.1 source-address 1.1.1.1
set system accounting events …
set system accounting destination radius server 10.10.10.1
Tacacs+
set system tacplus-server 10.10.10.1
set system tacplus-server 10.10.10.1 secret $lk2#&sf
set system tacplus-server 10.10.10.1 port 49 (domyślny)
set system tacplus-server 10.10.10.1 source-address 1.1.1.1
set system accounting events …
set system accounting destination tacplus server 10.10.10.1
Lokalna baza użytkowników
˥ Dwa typy kont:
˥ root, konto domyślne
˥ Konta użytkowników
˥ Konto root ˥ Domyślnie bez hasła
˥ Przywileje administratora
˥ Poza bazą użytkowników
˥ Konta użytkowników
˥ Każdy użytkownik musi być przypisany do klasy
˥ Różne poziomy użytkowników
˥ Przynajmniej jedno konto z pełnymi prawami w przypadku awarii
Lokalna baza użytkowników
set system root-authentication plain-text-password
set system login message …
set system login retry-options …
set system login password minimum-lenght …
set system login password change-type character-set
Set system login password change-type set-transitions
set system login password minimum-changes 3
set system login user test_1 class test_1
set system login user test_1 authentication plain-text-password
Klasy użytkowników – role
˥ Przypisanie użytkownikom odpowiednich grup uprawnień
˥ Operatorzy
˥ Administratorzy
˥ View only
˥ Definiowanie dozwolonych/zabronionych komend
set system login class test_1 permissions clear
set system login class test_1 permissions interface-control
set system login class test_1 permissions maintenance
set system login class test_1 permissions view
set system login class test_1 deny-commands .(start *)|(request system software)|(request chassis)
SNMP v2
˥ Hasła (community) niezabezpieczone – zalecane zarządzanie Out Of Band
˥ Domyślnie wyłączone, brak standardowych community
˥ Konfiguracja widoków dla grup użytkowników
set snmp view inventory-only oid system include
set snmp view community test view inventory-only
set snmp view community test view authorization read-only
set snmp view community test view clients 10.10.10.5/32
SNMP v3
˥ Hasła (community) zabezpieczone – szyfrowanie
˥ Wprowadzone pojęcie użytkownika
˥ Konfiguracja widoków dla grup użytkowników
set snmp v3 usm local-engine user nms-user authentication-sha authentication-password $safsf&
set snmp v3 usm local-engine user nms-user privacy-aes128 privacy-password $Y5wIm@4
Syslog
˥ Ustandaryzowany protokół, którego zadaniem jest logowanie lokalnie lub na zdalnym urządzeniu informacji z urządzenia
set system syslog user * any emerygency
set system syslog file message any info
set system syslog file audit interactive-commands any
set system syslog file processes deamon any
set system syslog console any any
set system syslog host 10.10.10.8 log-prefix hostname
NTP – Network Time Protocol
set system time-zone Europe/Warsaw
set system ntp boot-server 10.10.10.33
set system ntp authentication-key 1 type md5 value asdf2
set system ntp trusted-key 1
set system ntp server 10.10.10.33 key 1 prefer
set system ntp server 10.10.10.234 key 1
set system ntp source-address 1.1.1.1
Niezabezpieczone usługi
˥ Wszystkie usługi, których pakiety nie są zaszyfrowane
˥ Powinny być wyłączone
delete system services rsh
delete system services rlogin
delete system services ftp
delete system services finger
delete system services telnet
delete system services web-management http
Zabezpieczone usługi
˥ SSH
set system services ssh protocol-version v2
set system services ssh root-login deny
set system services ssh connection-limit 5
set system services ssh rate-limit 2 (na minutę)
˥ Web management
set security certificates local cert load-key-file name.pem
set system services web-management https local-certificate cert
set system services web-management https interface ge-0/0/0.0
Adres domyślny dla usług
˥ Domyślnie dla każdej usługi generującej na routerze pakiety wysyłane na serwera, domyślnym adresem źródłowym jest adres interfejsu leżącego na ścieżce do serwera
˥ Dobrym zwyczajem jest ustawienie adresu źródłowego dla takich usług na adres Loopback
set system default-address-selection
Filtry firewall
˥ Filtry mogą być dodane jako input lub output
˥ W przypadku interfejsu lo0 (RE) input oznacza ruch w kierunku RE, a output ruch wychodzący z RE
˥ W przypadku pozostałych interfejsów input oznacza ruch wchodzący do urządzenia na danym interfejsie, a output ruch opuszczający urządzenie na danym interfejsie
˥ Filtry firewall muszą mieć zdefiniowany protokół
˥ Filtr danego protokołu można przypisać tylko do interfejsu obsługującego dany protokół
˥ Przykładowe protokoły filtrów
˥ Ipv4 (family inet)
˥ Ipv6 (family inet6)
˥ Mpls (family mpls)
Filtry firewall
˥ Każdy filtr jest przeglądany od góry do dołu
˥ Jeżeli w pierwszym segmencie (term) nie zostanie dopasowane żadne wyrażenie, następny segment jest przeglądany
˥ Każdy filtr posiada domyślnie akcję DENY ANY w przypadku braku dopasowania
Filtry firewall
[firewall family inet] ilter example-filter { term 1 { from { source-address 10.0.0.0/8; } then { log; accept; } } term 2 { from { source-address 192.168.0.0/16; } then { accept; } } term 3 { from { source-address 172.16.0.0/12; } term 4 { from { source-address 200.200.0.0/24; } then { log; }
Discard packet
Packet Yes Does
packet match term 1?
Accept packet Log packet
Yes Does packet match
term 2?
Accept packet Log packet
Yes Does packet match
term 3?
Accept packet
Yes Does packet match
term 4?
Accept packet Log packet
No
No
No
No
Filtry firewall
[firewall family inet] filter example-filter { term 1 { from { protocol tcp; source-address 10.0.0.0/8; source-address 192.168.0.0/16; source-address 172.16.0.0/12; } then { accept; } } }
Filtry firewall
[firewall family inet] filter example-filter { term 1 { from { protocol tcp; source-address 10.0.0.0/8; source-address 192.168.0.0/16; source-address 172.16.0.0/12; } then { accept; } } }
No Discard packet
Yes Accept packet
Yes Accept packet
Yes Accept packet
Discard packet
Is the protocol
tcp?
Does packet match
SA 10.ʹ8?
Does packet match SA
192.168.ʹ16?
Does packet match SA
172.16.ʹ12?
Yes
No
No
No
List of match conditions (source-address)
Packet
Filtry firewall – akcje
accept terminating The packet is accepted.
discard terminating The packet is discarded.
reject message-type terminating The packet is rejected and the corresponding ICMP message is generated.
routing-instance routing-instance
terminating Routes the packet using the specified routing-instance.
next term non-terminating Continues to the next term for evaluation.
count counter-name non-terminating Counts the number of packets passing this term. A counter name is specific to the filter that uses it, so all interfaces that use the same filter increment the same counter.
forwarding-class class-name
non-terminating Classifies the packet to the specific forwarding class.
log non-terminating Logs the packet’s header information in memory on the packet forwarding engine (PFE). This is a Frist In First Out (FIFO buffer and is limited to about 400 entries.
loss-priority priority non-terminating Sets the scheduling priority of the packet.
policer policer-name non-terminating Applies rate limits to the traffic using the named policer.
sample non-terminating Samples the traffic on the interface. Use this non-terminating action only when sampling is enabled.
syslog non-terminating Records information in the system logging facility. This non- terminating action can be used with all actions except discard.
Filtry firewall – liczniki
˥ Może być tylko jeden licznik na każdy filtr
˥ Jeżeli filtr jest użyty w kilku miejscach, to posiadają domyślnie jeden wspólny zagregowany licznik, interface-specific powoduje wyłącznie
[firewall family inet] filter example-filter { term 1 { from { source-address 10.0.0.0/8; source-address 192.168.0.0/16; source-address 172.16.0.0/12; } then { count rfc1918; accept; } } }
Filtry firewall – logowanie
˥ Logowanie działa line rate
˥ Tylko ok. 400 ostatnich wpisów jest przechowywanych w pamięci
[firewall family inet] filter example-filter { term 1 { from { source-address 10.0.0.0/8; source-address 192.168.0.0/16; source-address 172.16.0.0/12; } then { count rfc1918; accept; } } term 2 { then { log; discard; } } }
Filtry firewall – wiele filtrów w jednym kierunku
˥ W systemie junos istnieje możliwość użycia kilku filtrów w danym kierunku
˥ Każdy z filtrów jest przeglądany w kolejności występowania
˥ Jeżeli pakiet zostanie dopasowany wewnątrz danego filtra, następny filtr nie jest już przeglądany
˥ Domyślna akcja DENY ANY występuje w ostatnim filtrze
Filtry firewall – wiele filtrów w jednym kierunku
Discard
First filter
Match
Term
Match
Term
Match
Packet
Additional filters
Match
Term
Match
Term
Match
Term Term
Filtry firewall – wiele filtrów w jednym kierunku
interfaces { lo0 { unit 0 { family inet { filter { input-list [ accept-web accept-ssh discard-all ]; } address 127.0.0.1/32; } } } }
Policing – rate-limiting
˥ Policery działają wspólnie z filtrami aby ograniczyć, zmienić oznaczenia ruchu dopasowanego do filtrów
˥ Każdy policer składa się z następujących elementów:
˥ Nazwa
˥ Parametr przekroczenia wartości (if-exceeding)
˥ Akcja
firewall { policer policer-name { filter-specific; if-exceeding { bandwidth-limit bps; bandwidth-percent number; burst-size-limit bytes; } then { policer-action; } } }
Policing Token bucket
Yes
No
Bucket-size (burst-size-limit)
Policer-action (discard, forwarding-class
or loss-priority)
Accept packet and subtract packet size
from bucket
Constant-rate token replenishment (bandwidth-limit)
Bursty arrivals
Enough tokens?
Policing
˥ Bandwidth-limit – ustawiamy ile bitów jest dozwolonych w ciągu jednej sekundy, dozwolone wartości to także k,m,g
˥ Z uwagi na charakterystykę algorytmu token-bucket ilość akceptowanych pakietów w ciągu sekundy może być nieznacznie większa od bandwidth-limit
˥ Burst-size-limit definiuje jak duży jest bucket, a co za tym idzie jakie są możliwe przekroczenia limitów
Policing filter specific lub term specific
˥ Domyślnie junos tworzy jeden policer na każdy segment (term)
˥ Jeżeli filtr firewall posiada wiecej niż jeden segment gdzie akcją jest wykonanie policera, to dla każdego segmentu będzie oddzielny policer
˥ Słowo kluczowe filter-specific w konfiguracji policera powoduje utworzenie jednego policer na cały filtr firewall, wszystkie segmenty dzielą wtedy wspólnie dany policer
Policing
firewall { family inet { filter limit-ssh { term 1 { from { protocol tcp; port ssh; } then { policer 10m; accept; } } } } } policer 10m { filter-specific; if-exceeding { bandwidth-limit 10m; burst-size-limit 625k; } then discard; } }
Dziękuję za uwagę
DODATKI
˥ Przykładowy filtr Control Plane
FILTR Control Plane
filter protect-re { term synflood-protect { from { source-prefix-list { bgp-neighbors; mgmt-nets; } protocol tcp; tcp-flags "(syn & !ack) | fin | rst"; } then { policer limit-100k; accept; } } term allow-bgp { from { prefix-list { bgp-neighbors; } protocol tcp; destination-port bgp; } then accept; }
term allow-ospf {
from { source-prefix-list { ipv4-interfaces; } destination-prefix-list { ospf-all-routers; ipv4-interfaces; } protocol ospf; } then accept; } term allow-ssh { from { prefix-list { mgmt-nets; } protocol tcp; destination-port ssh; } then { policer limit-10m; accept; } }
term allow-snmp {
from { prefix-list { snmp-servers; } protocol udp; destination-port 161; } then { policer limit-1m; accept; } } term allow-ntp { from { prefix-list { ntp-servers; localhost; } protocol udp; destination-port ntp; } then { policer limit-32k; accept; }
}
term allow-radius { from { prefix-list { radius-servers; } protocol udp; source-port [ 1812 1813 1645 ]; } then { policer limit-32k; accept; } } term icmp-frags { from { is-fragment; protocol icmp; } then { syslog; discard; } }
term allow-icmp {
from { protocol icmp; icmp-type [ echo-request echo-reply unreachable time-exceeded ]; } then { policer limit-1m; accept; } } term allow-traceroute { from { protocol udp; destination-port 33434-33523; } then { policer limit-1m; accept; } } term tcp-established { from { protocol tcp; source-port [ ssh bgp ]; tcp-established; } then { policer limit-10m; accept; } }
term default-deny { then { log; syslog; discard; } } }