Połaczenia SSH i bezpieczenstwo transmisji
Marek Guevara Braun
mguevara w acn.waw.pl
Wto, 7 Lut 2006, 22:43:57 CET
Cz w rny wrote:
> Dnia Tue, 07 Feb 2006 19:27:57 +0100, Marek Guevara Braun
> <marek.guevara w atm.com.pl> napisał:
>
>> Czyli coś takiego jak dane na temat jakości generatorów losowych danej
>> maszyny - parę lat temu Michał Zalewski (lcamtuf) generował ładne
>> rysunki przestrzenne obrazujące jakość generatorów liczb losowych
>> wykorzystywanych przy generacji numerów sekwencyjnych TCP na różnych
>> platformach - niby nikt się już chyba nie bawi w przejmowanie połączeń
>> TCP (nikt ???),
>
> To nie tak. Całkiem do niedawna znaczna większość systemów (wszystkie
> swego czasu) generowały kolejne numery sekwencyjne dla różnych transmisji
> TCP. W ten sposób można było przy pomocy maszyny zombie skanować porty
> zdalnej maszyny poprzez porównanie zmiay numerów sekwencyjnych TCP. Tak
> samo można było przewidzieć numer sekwencyjny kolejnych wysyłanych z
> komputera pakietów, więc można było przechwytywać sesje TCP i w ogóle
> dobrze się bawić.
IMHO "to nie tak" - idle scan przy użyciu "zombie" [1] wykorzystuje 16-bitowy
ID z nagłówka IP, natomiast numer sekwencyjny TCP (aka ISN dla pierwszego
pakietu) to 32 bitowe pole nagłówka, ale TCP. Na numerze sekwencyjnym
i 32-bitowym numerze potwierdzenia opiera się sesja TCP - jeśli jesteśmy
w stanie wymyślić, jakich numerów będą używały strony - można próbować podszyć
się pod jednego z rozmówców i coś tam wkleić do transmitowanych danych lub
zakończyć sesję wysyłając RST bez konieczności dostępu do "drutu".
Teoretycznie mamy 2^64 możliwości, ale jak wykazał lcamtuf [2] tak do końca nie
jest - i dla wielu platform wystarczy wiedzieć jakie numery są wybierane
- stąd heurystyka - bo dokładnie jest to takie samo zgadywanie zachowania
(ograniczanie przestrzeni) wykorzystanego algorytmu.
W każdym razie w dobie połączeń SSH wartość jaką przynosi możliwość
wymyślenia numerów sesyjnych jest dużo mniejsza niż za czasów telneta.
> Pierwsze zablokowało tę możliwosć OpenBSD i hardneningi jajek kernela.
> Teraz każde nowe połączenie TCP dosatje losową liczbę jako numer
> sekwencyjny TCP.
>
> Jakość sprzętowego generatora liczb losowych, systemowych funkcji
> realizujących losowania i specjalnych bibliotek do tego celu to osobny
> problem. OpenSSL nieźle sobie na tym polu radzi i również ten problem
> wział pod uwagę, więc raczej nie ma się co specjalnie przejmować.
Dobry generator implementowany w software jest niestety drogi/wolny
- używając systemu do obsługi wielu sesji SSL/TLS OpenSSL możesz wpaść
w pułapkę wydajności - zwykle rozwiązania wybierają "wydajność" ponad
"losowość" (tj. wybierają metody tańsze/szybsze). Sprzętowe generatory
liczb losowych to już inna historia. Nasz Linux obsługuje od niedawna
PadLock/xcrypt VIA, - czy coś jeszcze - wątpie. Nieco lepiej jest w
Open/Free/NetBSD bo tam są jeszcze różne HiFn i inne. Dodatkowo dostępność
tego w Polsce niemal zerowa. W sumie szkoda że nowe AMD czy Intele
nie zaimplementowały tego tak jak VIA.
> Generalnie nie ma co peniać, w 'normlanych' warunkach, choć trzeba być
> świadomym, że włamanie się jest kwestią nie możliwośći, a środków
> zainwestowanych ( w najprostrzym przłożeniu $ ).
Czasami te warunki nie są normalne, a czasem ktoś pisze narzędzie i nagle
to co wydawało się tylko wydumaną teorią może wyklikać każdy śmiertelnik
na swoim WinXP.
No ale zawsze jest jeszcze instancja wyższa dla paranoidalnych
secure-maniaków - przychodzą smutni panowie i zabierają całego kompa
wraz z kompletem kopii backup na CD/DVD :-)
> Chyba EOT co?
EOT, EOT.
Pozdrawiam,
Marek
[1] http://www.insecure.org/nmap/idlescan.html
[2] http://lcamtuf.coredump.cx/newtcp/
Więcej informacji o liście pld-users-pl