Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Cześć. W roku 2019 jeśli pamiętam, zgłoszono trzy CVE związane z TCP/MSS prowadzące np. do DoS (odkryte chyba przez Netflix).
Po tej aktualizacji dodany został klucz sysctl — 'net.ipv4.tcp_min_snd_mss' z domyślną wartością ustawioną na '48'.
W swoim ogłoszeniu DSA, Deweloperzy sugerowali zwiększenie do '536' (z zastrzeżeniem: "unless you know that your network requires a lower value").
Pamiętacie może te zgłoszenia? (Najważniejsze to chyba CVE-2019-11479). I czy waszym zdaniem dobry pomysł mieli Deweloperzy Debiana sugerując zwiększenie domyślnej wartości?
Czy według Was zwiększenie do '536', jest dobrym pomysłem? Dodatkowo można zastosować regułę firewall'a, w tym przypadku Iptables:
iptables -A INPUT -p tcp -m tcpmss --mss 1:500 -j DROP
Teraz atakujący używający małej wartości MSS (w tym przypadku <500) zostanie zablokowany.
A tak w ogóle zauważyłem, że z domyślną wartością '48', testy z wykorzystaniem np. polecenia 'dig +short rs.dns-oarc.net TXT' wskazywały np. coś takiego:
"2001:bc8:1824:170f::1 sent EDNS buffer size 1220" "2001:bc8:1824:170f::1 DNS reply size limit is at least 1206"
Po zakomentowaniu reguły Iptables, wyczyszczeniu Cache, adres był w formacie IPv4.
A więc, co Wy myślicie o tej sytuacji? Zmieniliście rozmiar MSS tak, jak sugerowali Deweloperzy? Jeśli nie to czy ma to sens?
Oczywiście z regułą Iptables w parze ze zmianami.
Pozdro.
Ostatnio edytowany przez wiarus (2022-03-10 10:26:03)
Offline
Ja miałem 500, bo ktoś tam kiedyś sugerował, że nie ma co schodzić poniżej tej wartości, bo praktycznie żadna szanująca się sieć nie powinna mieć ustawionego mniejszego MSS. Teraz sobie w sysctl podbiłem do tych rekomendowanych 536, bo to za dużo różnicy i tak już w moim przypadku nie zrobi. xD
Teoretycznie można by sobie dodać regułki blokujące mniejsze MSS ale czy jest sens, skoro kernel przepisze MSS z automatu pakietom z mniejszym MSS niż ustawione w net.ipv4.tcp_min_snd_mss ? Poza tym, MSS występuje jedynie w pakietach SYN i SYN-ACK protokołu TCP (w 3way-handshake), więc ta twoja reguła jest bardzo słaba jeśli chodzi o wydajność. xD Więc bardziej by się przydało coś takiego:
iptables -I INPUT -p tcp --tcp-flags SYN SYN -m tcpmss --mss 1:500 -j DROP ip6tables -I INPUT -p tcp --tcp-flags SYN SYN -m tcpmss --mss 1:500 -j DROP
Ostatnio edytowany przez morfik (2021-08-25 21:13:34)
Offline
Cześć, dzięki za odpowiedź.
Mam właśnie taką regułę, jaką podałeś, w firewall'u (na razie zakomentowana), ale podałem "szybszy" do napisania na forum wariant :-) Po zwiększeniu tej wartości można też zastosować taką regułę, która powinna wyłapać nietypowe wartości:
-A PREROUTING -p tcp -m conntrack --ctstate NEW -m tcpmss ! --mss 536:65535 -j DROP
Nie jest to lepsze rozwiązanie, ze względu na łańcuch PREROUTING? To tylko przykład.
W każdym razie, sprawdzę później tę wartość '536' i odkomentuję wspomnianą regułę.
Ostatnio edytowany przez wiarus (2021-08-26 10:08:54)
Offline
Łańcuch PREROUTING jest w tablicy raw, Tablica raw jest przed mechanizmem conntrack, więc nie da rady użyć -m conntrack.
W nftables to coś takiego można sobie wrzucić:
nft add rule inet raw PREROUTING meta l4proto tcp tcp flags & (syn | rst) == syn tcp option maxseg size 1-500 counter drop
Offline
Ok, dzięki. Czyli, w sumie, pozostaje reguła, którą napisałeś w poprzedniej wiadomości (do czasu przejścia na nft).
Pozdro.
Offline
W iptables też możesz sobie taką wrzucić.
iptables -t raw -I PREROUTING -p tcp -m tcp --tcp-flags SYN SYN -m tcpmss --mss 1:500 -j DROP
Ostatnio edytowany przez morfik (2021-08-26 14:37:00)
Offline
Co do CVE-2019-11479, to tu piszą, że to już dawno załatane:
https://vuldb.com/?id.136652
Także zarówno Gentuś jak i OpenWRT mam już raczej odporne:
np router:
OpenWrt 21.02-SNAPSHOT, r16263-4003eeab35 Linux Router 5.4.137 #0 Mon Aug 2 20:42:46 2021 mips GNU/Linux
Pozdro
Ostatnio edytowany przez Jacekalex (2021-08-26 19:20:54)
Offline
Hmm, po przeanalizowaniu doszedłem do wniosku, że coś tutaj chyba jednak nie działa za dobrze. xD
Generalnie to piszą, że ten net.ipv4.tcp_min_snd_mss ma zmienić po cichu wartość MSS na tę którą się tutaj określi. No to sprawdziłem jak sprawa wygląda przy pomocy maszyny wirtualnej, gdzie do trasy domyślnej dodałem sobie advmss 100. Ten parametr ma wymusić w pakietach SYN ustawienie MSS na 100. No i potem z maszyny wirtualnej próbowałem połączyć się via ssh na mojego kompa. Podejrzałem co tam wireshark zanotował, no i widzę MSS w pakiecie SYN ustawiony na 100, a nie 536 (być może to jest to zwiększenie MSS po cichu). xD
Próbowałem przepisać wszystkie ustawienia od MSS w sysctl, tj. te poniższe:
# sysctl -a | egrep -i "mss|mtu" net.ipv4.ip_forward_use_pmtu = 0 net.ipv4.ip_no_pmtu_disc = 0 net.ipv4.route.min_adv_mss = 536 net.ipv4.route.min_pmtu = 536 net.ipv4.route.mtu_expires = 600 net.ipv4.tcp_base_mss = 536 net.ipv4.tcp_min_snd_mss = 536 net.ipv4.tcp_mtu_probe_floor = 536 net.ipv4.tcp_mtu_probing = 1 net.ipv6.conf.all.accept_ra_mtu = 1 net.ipv6.conf.all.mtu = 1280 net.ipv6.conf.default.accept_ra_mtu = 1 net.ipv6.conf.default.mtu = 1280 net.ipv6.route.min_adv_mss = 1220 net.ipv6.route.mtu_expires = 600
No i przy próbie połączenia dalej widzę w pakiecie SYN z maszyny wirtualnej MSS 100.
Nie wiem czy MSS jest ustawiony jedynie w pakiecie i po tym jak trafia do kernela, to ten mu go zwiększa, bo nawet jeśli robi to po chichu, to nie ma tego jak zweryfikować. xD Za to reguła na zaporze łapie ten zaniżony MSS:
# nft list table inet raw table inet raw { chain PREROUTING { type filter hook prerouting priority raw; policy accept; tcp flags & (syn | rst) == syn tcp option maxseg size 1-500 counter packets 51 bytes 3060 drop } chain OUTPUT { type filter hook output priority raw; policy accept; } }
Więc teoretycznie ta regułka poprawia bezpieczeństwo, bo blokuje ten niski MSS zanim kernel coś z tym pakietem będzie później robił.
Także nie wiem co o tym myśleć ale sobie te regułkę na wszelki wypadek zostawię. xD
Offline