Nepouzivajte ftp

Vseobecne teoreticke kecy

V dnesnej dobe uz vsetci vieme, ze ftp je nebezpecna sluzba. Jej najhorsou vlastnostou je posielanie hesla v plaintext formate cez siet z klientu na server. Vdaka tejto slabine je mozne heslo zachytit tcpdumpom na jednej z masin, cez ktoru packety prudia alebo vyuzitim techniky arp poisoning na okolitych strojoch (sniffing). Vsetci rozumny ludia uz pouzivaju scp alebo sftp, cize technologie, ktore tieto problemy riesia silnym sifrovanim - heslo sa uz neprenesa v plaintext formate, ale je zasifrovane jednosmernym algoritmom. Takto vzniknuty retazec sa da rozlustit len pouzitim techniky bruteforce, ktora vsak vyzaduje enormne velky vypoctovy vykon a enormne dlhy cas. Realtime desifrovanie je uplne vylucene a dnesne sifrovacie algoritmi nedavaju ziadnu realnu sancu ani instituciam s neobmedzenym rozpoctom a najsilnejsimi pocitacmi na svete. Niekedy sa nam ale stane, ze sme lenivy alebo ze pouzivame ftp len preto, ze zakaznik si nechce nainstalovat winscp. Na POSIXovych systemoch vsak existuje mechanizmus, ktory nam zabrani prihlasit sa cez ftp ako root. Je to subor /etc/ftpusers. Ak tento subor obsahuje retazec root, nieje mozne sa cez ftp prihlasit i napriek tomu, ze uzivatel je opravneny pouzivat ucet roota a pozna jeho heslo. Problematicke su prostredia, kde root heslo pozna vacsie mnozstvo ludi. Podla velmi striktneho security standardu zapiseme rootovo ID do suboru /etc/ftpusers a sme spokojny, pretoze si myslime, ze ak sa aj nejaky lenivy blbec pokusi prihlasit cez ftp ako root (napr. preto, lebo chce uploadnut obrovsky subor, ktoreho velkost presahuje filesize limit nastaveny pre standardneho uzivatela a nevie, ze tento limit sa da docasne zmenit. Okrem toho pozna rootovske heslo, tak to skusi. Samozrejme, neprihlasi sa, o subore /etc/ftpusers v zivote nepocul a vykasle sa na to, alebo zavola na second level a spyta sa, co ma robit. Pozrime sa vsak, co sa stalo pri jeho pokuse o prihlasenie sa:

Pokus

Na stroji catcher4 nam bezi ftp server:

[root@catcher4 /]# nmap localhost

Starting Nmap 4.03 ( http://www.insecure.org/nmap/ ) at 2007-07-27 14:01 CEST

Interesting ports on catcher4.no-ip.org (127.0.0.1):

(The 1672 ports scanned but not shown below are in state: closed)

PORT STATE SERVICE

21/tcp open ftp

22/tcp open ssh

Nmap finished: 1 IP address (1 host up) scanned in 1.232 seconds

[root@catcher4 /]# grep root /etc/ftpusers

root

[root@catcher4 /]#

Root heslo na servery catcher4 je zaq12wsx

Zo stroja catcher3 sa pokusime prihlasit cez ftp ako root:

[root@catcher3 /]# ftp catcher4.no-ip.org

Connected to catcher4.no-ip.org (88.86.106.111).

220 FTP Server ready.

Name (catcher4.no-ip.org:root): root

331 Password required for root.

Password:

530 Login incorrect.

Login failed.

Podotykam, ze som zadal spravne heslo.

Na stroji catcher2, ktory je v tej istej sieti ako catcher4 a catcher3 som zachytil tieto packety:

[root@catcher2 /]# tcpdump -A -i any port 21

E..Ki.@.@.KEXVjoXVjn...,.......U....q......

........220 FTP Server ready.

E..?p.@.@.D.XVjnXVjo.,.....U...2...........

........USER root

E..Ui.@.@.K9XVjoXVjn...,...2...`...........

....331 Password required for ro

E..Cp.@.@.D.XVjnXVjo.,.....`...S....<......

PASS zaq12wsx

E..Ji.@.@.KCXVjoXVjn...,...S...o...........

.../...&530 Login incorrect.

Pouzity bol ftp server ProFTPD Version 1.3.0a. Ine som zatial netestoval.

Co sme zistili

Z uvedeneho jasne vyplyva, ze subor /etc/ftpusers je zbytocny a sluzba ftp by mala byt zakazana na vsetkych zariadeniach, ktore niesu uzavrete vo velmi bezpecnej sieti. Pouzivanie ftp servera na internetovych strojoch je znamkou dusevnej choroby, hlavne ak rootovske heslo pozna viac roznych pracovnikov s rozlicnymi zvykmi a znalostami. Staci, ze jeden z nich to skusi a heslo moze byt zachytene.

Riesenie

1. odinstalovat ftp server a uz nikdy ho nepouzit. Poskytnut windowsoidnym zakaznikom nastroj WinSCP, ktory je zadarmo

2. upravit zdrojaky proftpd tak, aby spojenie zabil okamzite ako dostane prikaz USER root (alebo USER $user pricom $user je hociktory riadok zo suboru /etc/ftpusers)

3. pomocou tcpdumpu a jednoducheho demonika zabijat vsetky spojenia, ktore prenesu retazec "USER root". Zabitim spojenia sa dosiahne to, ze ftp server neodpovie "password required" a klient nedostane sancu poslat heslo.

Preferujem riesenie cislo 1.

Co z toho vyplyva

Vyplyva z toho jedna nechutna skutocnost - od teraz budem asi tak 60 hodin kontrolovat vsetky internetove servery, o ktore sa staram a disablovat ftpd, wuftpd a proftpd. Okrem toho budem musiet upravit par skriptov, ktore sa automaticky prihlasuju na servery cez ftp a uploaduju/downloaduju rozne data tak, aby pracovali cez sftp alebo scp. To znamena, ze na east fork session sa nezucastnim, za co dakujem vsetkym tym prijebanym lenivym a sprostym ludom, ktori doteraz pouzivaju ftp a nie sftp len preto, lebo preto!!! Ospravedlnujem sa a prajem Vam prijemnu zabavu.