ftp oder bftp und brute force angriffe

wollet42

Neuer User
Mitglied seit
5 Aug 2005
Beiträge
97
Punkte für Reaktionen
0
Punkte
6
Hallo,

seit ich auf meiner Fritz über den ds-mod und syslogd mehr log infos einsehen kann, stelle ich fest, dass mein im i-net freigegebener ftp server alle 2-3 Tage per brute force pwd Attacke angegriffen wird.

Bisher war es jedoch erfolglos. :)

Ich wollte hier aber mal zur Diskussion stellen, ob man das nicht etwas besser sichern kann. Deshalb folgender Vorschlag:

bei wiederholter falscher pwd Eingabe den ftp server für z.B. 5 Minuten abschalten.

Ich weiss nicht ob das über den ftp server direkt geht oder ob man ein Script braucht was das log file scant und dann ftpd killt und nach 5 min neu started.

Gibt es evtl andere Methoden den Angriff zu erkennen und darauf zu reagieren?

Gruss,
Wolle

PS um diese Log Ausgaben zu sehen muss man den ftpd mit Zusatzoption -l neu starten (über z.B. debug.cfg)

edit: zum loggen -l als param übergeben. -t war oben falsch angegeben, dass setzt den idle timeout
 
Zuletzt bearbeitet:
Ich hatte mir dafür mal folgendes Script gebastelt, was per cron z.B. alle 15 min aufgerufen wird.
Bei zuvielen fehlerhaften ftp-Logins wird der ftpd dann für 30 min gestoppt.
Ist natürlich kein Schutz gegen die Attacken, aber verhindert immerhin weitere Attacken für beschränkte Zeit
(allerdings auf Kosten der eigenen ftp-Zugangsmöglichkeit).

Code:
#!/bin/sh
if ps ax|grep -v grep|grep ftpd >/dev/null; then
        anz=`grep "FTP LOGIN [RF][EA]" /var/log/messages|/var/tmp/busybox wc -l`
        if [ $anz -gt 10 ]; then
                cat /var/log/messages >> /var/tmp/stick/messages.ftp
                echo > /var/log/messages
                /var/tmp/stick/ftpdstop &
        fi
fi
Ich verwende den normalen ftpd. Das Script sucht nach "LOGIN REFUSED"(oder FAILED)-Einträgen in der messages-Datei.
Bei mehr als 10 davon, wird der ftpd für 30 min beendet (ftpdstop) und die messages-Datei "verschoben " und geleert.
Code:
# cat /var/tmp/stick/ftpdstop
#!/bin/sh
killall ftpd 2>/dev/null
sleep 5
killall ftpd 2>/dev/null
sleep 1800
/sbin/ftpd -D -q -t 120 -m 15 -h "fbox" -l
Die Pfade und der in der messages-Datei gesuchte String müssen (ggf.) angepasst werden.
Bei bftpd z.B. sind andere Einträge in der messages-Datei, also grep-String ändern!

EDIT:
zu deinem PS: (mein) ftpd muss übrigens mit "-l" und nicht mit "-t" gestartet werden
 
Zuletzt bearbeitet:
Hi,

danke für die schnelle Antwort.

Das wird das Problem etwas verkleinern aber leider nicht beseitigen, da so ein Angriff nur 10-20 min dauert. D.h. selbst wenn ich den logfile überwache hat der Angreifer bis zu 15min Zeit.

Obendrein habe ich gerade entdeckt, dass in meinem Fall der Typ soger mehrfach versucht hat von der gleichen IP. D.h. einmal um 1:42 bis 1:58 dann wieder um 9:52-10:11.

Man könnte natürlich das script jede min laufen lassen, ich vermute aber dass dann die Fritzbox in die Knie geht.

Man bräuchte also eine Lösung, die direkt beim schreben des logs aufpasst.
Also irgendwie einen eigenen syslogd der die Messages überwacht und anschliessend an den realen syslogd weiterpiped.

Ich vermute dass ist bereits eine Art intrusion detection system was es vermutlich schon gibt, ich kenn mich damit aber sehr schlecht aus.

Gruss,
Wolle
 
Eine andere Möglichkeit:
Da wir ja hier im dsmod-Subforum sind und den Source des ftpd haben könnte man bei falschem Passwort eine Zwangspause von einigen Sekunden einlegen. Das wäre auch nicht so schwer zu proggen.

MfG Oliver
 
Ich guck mal rein, bin aber etwas aus der Übung bzgl C-Proggen, erst recht unter Linux.

Kurze nachfrage zum ds-mod make. Die inetutils werden nur bei make precompiled mit kompiliert oder reicht ein make?

Gruss,
Wolle
 
Im Moment werden die noch gar nicht mitgebaut. Das müsste erst noch integriert werden.

MfG Oliver
 
Äh, jetzt bin ich etwas confused.

Ich dachte die sind Teil der original Firmware und die wird vom ds-mod mitgebaut?

hab ich das falsch verstanden, wird also nur der Kernel mitgebaut?
 
Der ftpd wird im Moment aus der original Firmware übernommen. Aus dem Opensource-Package wird nur der Kernel gebaut.

MfG Oliver
 
Hi,

ich versuche gerade die inetutils zu compilieren nach der Anleitung
http://wiki.ip-phone-forum.de/software:ds-mod:howtos#eigene_programme_kompilieren

Leider bleibe ich mit folgender Fehlermeldung hängen.

Code:
configure: creating ./config.status
config.status: error: cannot find input file: Makefile.in
Leaving inetutils-1.4.2+20040207
for dir in inetutils-1.4.2+20040207; do \
        make -C $dir LIBS= LIBCRYPT=-lcrypt || exit 1 ; \
done
make[1]: Entering directory `/user/wolle/ds-mod/ds-0.2.9_26-13/source/avm-gpl-04.29/FTP/inetutils-1.4.2+20040207'
make[1]: *** Keine Targets angegeben und keine >>make<<-Steuerdatei gefunden.  Schluss.
make[1]: Leaving directory `/user/wolle/ds-mod/ds-0.2.9_26-13/source/avm-gpl-04.29/FTP/inetutils-1.4.2+20040207'
make: *** [all] Fehler 1

Kann mir irgendwer weiterhelfen?

edit: ich vermute das hängt mit automake zusammen, hab aber keine Ahnung wie ich das verwende
edit2:
ein Aufruf von automake im .../inetutils-1.4.2+20040207$ Verzeichnis liefert:

Code:
configure.ac:88: version mismatch.  This is Automake 1.9.5,
configure.ac:88: but the definition used by this AM_INIT_AUTOMAKE
configure.ac:88: comes from Automake 1.7.7.  You should recreate
configure.ac:88: aclocal.m4 with aclocal and run automake again.

nach Aufruf von aclocal (ohne Fehelrmedlung) führt ein erneutes automake zu
Code:
Makefile.am: required file `./INSTALL' not found
Makefile.am: required file `./NEWS' not found
Makefile.am: required file `./README' not found
Makefile.am: required file `./AUTHORS' not found
Makefile.am: required file `./ChangeLog' not found
Makefile.am: required file `./COPYING' not found

Irgendwie scheint da einiges zu fehlen in den Sourcen oder liege ich falsch?

/edit2

Danke.

Gruss,
Wolle
 
Zuletzt bearbeitet:
so, nun bin ich etwas weiter gekommen:

im Verzeichnis ds-mod/ds-0.2.9_26-13/source/avm-gpl-04.29/FTP/inetutils-1.4.2+20040207
aclocal
automake --foreign --include-deps Makefile
autoconf

hat geklappt. Ein anschliessendes make in ds-mod/ds-0.2.9_26-13/source/avm-gpl-04.29/FTP/

stoppt mit folgender Fehlermeldung. Man könnte fast meinen das ist ein source fehler ??

Code:
Making all in ftpd
make[3]: Entering directory `/user/wolle/ds-mod/ds-0.2.9_26-13/source/avm-gpl-04.29/FTP/inetutils-1.4.2+20040207/ftpd'
if gcc -DHAVE_CONFIG_H -I. -I. -I.. -DPATH_FTPWELCOME=\"/home/wolle/filesystem/etc/ftpwelcome\" -DPATH_FTPUSERS=\"/home/wolle/filesystem/etc/ftpusers\" -DPATH_FTPLOGINMESG=\"/etc/motd\" -DPATH_FTPCHROOT=\"/home/wolle/filesystem/etc/ftpchroot\" -DPATH_FTPDPID=\"/home/wolle/filesystem/var/run/ftpd.pid\"     -I../include    -g -O2 -MT ftpcmd.o -MD -MP -MF ".deps/ftpcmd.Tpo" -c -o ftpcmd.o ftpcmd.c; \
then mv -f ".deps/ftpcmd.Tpo" ".deps/ftpcmd.Po"; else rm -f ".deps/ftpcmd.Tpo"; exit 1; fi
ftpcmd.y:111: error: conflicting types for `sizecmd'
extern.h:69: error: previous declaration of `sizecmd'
ftpcmd.y: In Funktion >>yylex<<:
ftpcmd.y:1033: Warnung: Zuweisung streicht Qualifizierer von Zeiger-Zieltypen
ftpcmd.y:1059: Warnung: Zuweisung streicht Qualifizierer von Zeiger-Zieltypen
make[3]: *** [ftpcmd.o] Fehler 1
make[3]: Leaving directory `/user/wolle/ds-mod/ds-0.2.9_26-13/source/avm-gpl-04.29/FTP/inetutils-1.4.2+20040207/ftpd'
make[2]: *** [all-recursive] Fehler 1
make[2]: Leaving directory `/user/wolle/ds-mod/ds-0.2.9_26-13/source/avm-gpl-04.29/FTP/inetutils-1.4.2+20040207'
make[1]: *** [all] Fehler 2
make[1]: Leaving directory `/user/wolle/ds-mod/ds-0.2.9_26-13/source/avm-gpl-04.29/FTP/inetutils-1.4.2+20040207'
make: *** [all] Fehler 1

Tipps sind sehr wilkommen.

Danke

mfg,
Wolle
 
Oh, je. Das sieht nach Arbeit aus. Eigentlich dachte ich, dass das ohne Klimmzüge läuft, da es von AVM ja auch verwendet wird...
Wobei in deinem Zitat der "falsche" gcc genommen wird.

MfG Oliver
 
denkfehler...
 
Zuletzt bearbeitet:
Nachdem ich mir die Sourcen von avm neu gezogen habe klappt make nun.

Allerdings ist mein ftpd erheblich grösser als der von avm kompilierte.
original ftpd: 71860
neuer ftpd: 225380

Ich bin mir nicht sicher ob wirklich der richtige Compiler und das richtige Target genommen wurden.

Kann ich das irgenwie prüfen?

Gruss,
Wolle
 
Erstmal mit "mipsel-linux-strip" strippen und dann kannst du mit "file ftpd" nachschauen.

MfG Oliver
 
Hi,

ich hab jetzt nochmal von vorn angefangen und kann jetzt kompilieren

ich hab die ar7def.mk editiert:
Code:
export PROJECTDEFS  = -DAR7 -DOSIP_RETRANSMIT_2XX

export PROJECTCFLAGS = -Os -fomit-frame-pointer

export PROJECTCXXFLAGS = $(PROJECTCFLAGS) \
                         -fno-rtti -fno-exceptions -fno-unwind-tables \
		         -fno-use-cxa-atexit  -fno-vtable-gc

export SED=/bin/sed
export EGREP=/bin/egrep

EWNWROOTFS=uclibc

ifeq ($(EWNWROOTFS),uclibc)
TARGET=mipsel-linux
TARGETFS=$(HOME)/filesystem
TARGETPATH=$(HOME)/ds-mod/ds-0.2.9_26-13/toolchain/target/bin
#TARGETPATH=/home/mipsel/mipsel-uclibc-linux/bin
CROSSTARGET=mipsel-linux
endif

HOSTCC=mipsel-linux-gcc

export PATH := $(TARGETPATH):$(PATH)

export LC_CTYPE=C

Anschliessend geht ein make.

Der ftpd ist modifiziert und wartet nach falschem login 10 sec (bei jedem weiteren falschen login 10 sec mehr) Die Lösung ist nicht sehr sauber geht aber.

Leider hab ich nun ein neues Problem, im syslog steht jetzt eine Fehlermeldung:

Code:
Feb 27 23:27:01 router ftp.err ftpd[2441]: can't open /home/release/source.release/filesystem/var/run/ftpd.pid: No such file or directory

Der Fehler taucht jetzt auch auf, wenn ich den original ftpd starte.
Irgendwie ist irgendeine cfg Datei defekt, ich weiss aber nicht wo das gespeichert wird.

Kann mir einer sagen wo ich suchen soll?

Gruss,
Wolle
 
Bei mir steht das auch da. (original ftpd)

MfG Oliver
 
So, nun hab ich mal etwas getestet und eine ftpd Version gebaut, die mit delays reagiert auf falsche pwd Eingaben:

1. mal falsches Passwort: 10sec Pause, beim 2. mal 2*10sec Pause usw bis nach dem 5. mal die Verbindung zurückgesetzt wird.

Bei falschem login Namen das Gleiche allerdings wird hier erst nach 10 mal zurückgesetzt. Das bremst die Angriffe noch mehr aus.

Leider hatte ich in den letzten Tagen keinen Angriffsversuch mehr, kann also nur simuliert testen.

Anbei die von mir in den avm sourcen geänderten Dateien:
~/ds-mod/ds-0.2.9_26-13/source/avm-gpl-04.29/FTP/ar7def.mk
~/ds-mod/ds-0.2.9_26-13/source/avm-gpl-04.29/FTP/inetutils-1.4.2+20040207/ftpd/ftpd.c

und ein für 2.6 Kernel generiertes binary (keine Ahnung ob das unter 2.4 geht)

Kochrezept:

1. toolchain muss da sein http://wiki.ip-phone-forum.de/software:ds-mod:howtos#eigene_programme_kompilieren
2. ~/ds-mod/ds-0.2.9_26-13/source/avm-gpl-04.29/FTP/ar7def.mk editieren (Verzeichnisse anpassen, siehe anghängte Version)

edit:
2a. im Verzeichnis ds-mod/ds-0.2.9_26-13/source/avm-gpl-04.29/FTP/inetutils-1.4.2+20040207
$ aclocal
$ automake --foreign --include-deps
$ ./configure --build=i386-linux-gnu --target=mipsel-linux --host=mipsel-linux
/edit

3. im Verzeichnis ds-mod/ds-0.2.9_26-13/source/avm-gpl-04.29/FTP make (das dauert jetzt ein paar Minuten und bricht bei mir mit einer Fehlermeldung beim Erzeugen von ftp ab

Code:
make[3]: *** [cmds.o] Fehler 1
make[3]: Leaving directory `~/ds-mod/ds-0.2.9_26-13/source/avm-gpl-04.29/FTP/inetutils-1.4.2+20040207/ftp'
make[2]: *** [all-recursive] Fehler 1
make[2]: Leaving directory `~/ds-mod/ds-0.2.9_26-13/source/avm-gpl-04.29/FTP/inetutils-1.4.2+20040207'
make[1]: *** [all] Fehler 2
make[1]: Leaving directory `~/ds-mod/ds-0.2.9_26-13/source/avm-gpl-04.29/FTP/inetutils-1.4.2+20040207'
make: *** [all] Fehler 1

Ich hab das ignoriert, da ftpd erfolgreich erzeugt wurde.

4. Im ftpd Verzeichniss mit mipsel-linux-strip ftpd die Datei strippen und mit file ftpd testen ob auch für mipsel gebaut wurde
Code:
vdr:~/ds-mod/ds-0.2.9_26-13/source/avm-gpl-04.29/FTP/inetutils-1.4.2+20040207/ftpd$ file ftpd
ftpd: ELF 32-bit LSB executable, MIPS, version 1 (SYSV), dynamically linked (uses shared libs), stripped

5. jetzt ftpd auf fritzbox kopieren (ich leg die auf dem usb stick ab), alten ftp stoppen und neuen starten

Code:
$ killall ftpd
$ /var/media/ftp/CnMemory-Partition-0-1/bin/ftpd -D -q -t 120 -m 2 -l -h Fritz_ftpd

Wenn ihr den syslogd aktiviert habt meldet er erfolgreiche und nicht erfolgreiche login Versuche.

Gebt mir mal ne Rückmeldung ob das funktioniert.

Gruss,
Wolle

PS im code File sind alle Änderungen von mir mit insert/delete markiert.
 

Anhänge

  • ftpd.tar.bz2
    42.4 KB · Aufrufe: 19
Zuletzt bearbeitet:
Hallo,

hat denn keiner ne Meinung zu oder Intersesse an dem modifizierten ftpd?

Gruss,
Wolle
 
Hallo,

ich hole diesen Thread mal aus der Versenkung.
Wie ist der akutelle Status bezüglich der Sicherheit des FTP Zugangs?
Ist diese Änderung mittlerweile Teil von Freetz?

Mal angenommen der Angreifer errät das Passwort: Welches Risiko besteht dann? Solange der User nur auf das freigegebene Verzeichniss zugreifen kann, soll es mir recht sein (...), falls er nicht auf die ganze Box zugreifen kann.

Davon abgesehen: Wie kann ich überhaupt den FTP vom Internet aus erreichen?

Gruß,
Hendrik
 
Niemand komtm an deinen ftp, so lange du ihn nicht explizit ins Internet freigibst. Somit kannst du entspannt sein.
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.