About
fv_2007
Agile innovative developer with deep insight into lots of platforms, technologies and protocols. Absolute “early adopter” in Web 2.0 technologies and more. Large professional network and eagerly talking about architecture, strategy, design patterns, restful ressources, object-oriented thinking and modeling languages such as PML. Special interest in programminglanguages constructs, knowledge on languages like Smalltalk, Erlang, Java, Clojure, Scala, Ruby... read more
Follow
Feedfavicon
Language

Firewall Drop With AWK March 09, 2010 16:29 6 months ago

Sidder i min morgen cafe på vej til job. Nyder min nyder min kaffe og et rundstykke mens computer venter på dagens første vise ord. Jeg har på fornemmelsen at nogen er ved at komme mig i forkøbet. Det er som min maskine er begyndt at arbejde mens jeg kigger ud af vinduet. Måske er der nogen på det lokale netværk der er ved at logge ind. Selvfølgelig skal vi være online hver eneste sekund i døgnet for at kunne dele max antal informationer. Det er jo det der får os til at tro vi er på forkant. På den anden side vil vi ikke dele mere højst nødvendigt for alle virksomheden hemmelig dokumenter ligger i mappen ved siden af. Det ser ud til at der er en hårfin grænse mellem at dele og lave indbrud på et computer netværk.

Jeg må indrømme at jeg i flere tilfæde har checket, af fagligt nysgerrighed naturligvis, maskiner i toget. For det meste er det en lej og langt de fleste menneskers computere er fuldstændigt blotlagt for sikkerhed. Det gælder også højt rangerede virksomheder der tiltror deres medarbejdere vigtige personfølsomme dokumenter. Man kan diskutere hvorvidt det skal være nødvendigt at bære følsom information rundt på en laptop undervejs i toget. Lemfældig omgang med personfølsomme oplysninger er en alvorlig sag og kan give frihedberøvelse.

Mange virksomhedsbrugere tror fejlagtigt at deres sikkerhed er høj fordi de bruger VPN og firewall mens de nemt kan dele informationer når de er i hjemmet eller på arbejdspladsen. Det er ikke altid sandheden.

Tilbage til denne morgen. Først vil jeg vide hvilken IP ) adresse som jeg har fået udleveret af DHCP ).

Disse forsøg er lavet på en linux box og enkelte kræver root access. De kan også foretages på en Mac. Windows aner jeg ikke noget om. Jeg starter med ifconfig

[frank@linutop ~]# ifconfig 

inet addr:172.123.23.77  Bcast:172.123.23.255  Mask:255.255.255.0
...

Nu da jeg kan se hvilken adresse der er blivet udleveret er det nemt at finde de andrer maskiner på LAN subnet. Jeg benytter Nmap fordi den lille applikation har være min ven i mange år. Bemærk at jeg ikke scanner hele internettet men kun de sidste 255 mulige adresser i LAN. Argumentet -s betyder at vi laver dette forsøg så stille så muligt uden at undersøge de enkelte hosts yderligere.

[frank@linutop ~]# nmap -sP 172.123.23.0/24

Starting Nmap 4.20 ( http://insecure.org ) at 2010-03-12 18:26 CET
Host host(172.123.23.1) appears to be up.
Host host(172.123.23.77) appears to be up.
Host host(172.123.23.122) appears to be up.
...

Her kan man se hvormange maskiner der findes på LAN og hvilken IP adresser de har. Næste punkt er at se hvilken services der åbne. Her bruger jeg igen Nmap men denne gang kun mod en enkelt maskine og denne gang vil Nmap være mere aggressiv. Blandt andet vil log filerne på den ramte maskine løbe en tur.

Det næste skridt er at finde ud af hvilken former for services der køre på disse maskiner og måske at gætte deres operativsystem(-A). Det er normalt at give en indikation af time to live(-T4).

[root@linutop ~]# nmap -A -T4 -sS 172.123.23.122 

Starting Nmap 4.20 ( http://insecure.org ) at 2010-03-12 19:03 CET
Not shown: 1695 closed ports
PORT    STATE SERVICE VERSION
80/tcp  open  http    thttpd 2.19-MX Jul 20 2009
111/tcp open  rpcbind  2 (rpc #100000)
No exact OS matches for host (If you know what OS is running on it, see http://insecure.org/nmap/submit/ ).
Uptime: 0.634 days (since Fri Mar 12 03:51:08 2010)
Network Distance: 1 hop
Service Info: Device: WAP
Nmap finished: 1 IP address (1 host up) scanned in 30.564 seconds

Ups. Det ser ud til at være et sikkerhedskamera :-)

Herfra er en masse muligheder for at ødelægge eller bare være nyssgerig men det er en anden sag. Nu vil jeg i stedet kigge på hvem der forsøger at logge ind på min egen maskine. I mange tilfæde kan ens computer være under hårdt angreb uden at man ved det. En indikation kan være at netforbindelsen virker langsom eller harddisken arbejder uforholdsvis meget. Hvis dette er tilfælde er det en god ide at undersøge maskinens logfiler grundigt. Men først lige et ord om deling for den almindelige internetbruger.

Deling

Den først tommefinger regel er nem. Del intet. Slå alt deling fra. Hvis du så absolut vil promovere dig som guru kan du oprette en offenlig mappe hvori der kun findes ting der kan tåle en tur gennem “Velkommen til forsiden”! Hvis du vil dele med andre computer på arbejde eller hjemme skal disse dellingere mindst have login og password.

Når en windows maskine, eller rettere windows maskinenes bruger har delt alting kan man med meget lidt snile checke den ud. Jeg bruger smbclient fordi det er nemt og man kan sende password med hver enkelt kommando. Argumentet -L betyder list og -N betyder at jeg underkender bruger og password.

frank@iMac:~\> smbclient -L 10.3.146.108 -N

Domain=[LAPTOP] OS=[Windows 5.1] Server=[Windows 2000 LAN Manager]

	Sharename       Type      Comment
	---------       ----      -------
	IPC$            IPC       Fjern-IPC
	print$          Disk      Printerdrivere
	SharedDocs      Disk      
	ADMIN$          Disk      Fjernadministration
	C$              Disk      Standardshare
	Printer         Printer   Microsoft Office Document Image Writer

Det vigtige er at jeg se de shares der findes på denne og andre maskiner. Nu vil jeg forsøge at bruge smbclient til at skabe en slags FTP adgang til et C drev på en tilfældig windows maskine eller anden som deler Windows naboskab med SMB eller andre OS med Samba software

frank@iMac:~\> smbclient //10.3.146.108/ADMIN$ -U Administrator
Password: NONE
Domain=[LAPTOP] OS=[Windows 5.1] Server=[Windows 2000 LAN Manager]
smb: \> ls 
  Billeder                           DR        0  Thu Oct  4 11:36:19 2007
  Musik                              DR        0  Tue Jan 13 09:09:30 2009
  Videoer                            DR        0  Wed Mar 29 15:59:02 2006
smb: \> exit

Som på de fleste windows maskiner findes der en administrator profil som jeg benytter med argumentet -U. Password er faktisk det mest brugte.. Med mindre at sikkerheden specielt er sat på kan man dette på rigtige mange maskiner.

Firewall

Firewallen er din sikring mod at blive ramt udefra og den skal være i panik. Luk alt. Svar på intet. Et negativt svar er et svar for meget. Hvis man laver et drop mod en IP adr bliver al trafik diregeret til /dev/null.

Script

I det efterfølgende script vil jeg scanne en logfil for entry der viser at nogen forsøger at lave et ssh login på min maskine. Hvis jeg kan finde nogen vil jeg lukke dem ude med et dynamisk drop af min firewall. Det betyder også at de ikke kan se min hjemmeside eller andre services men sådan er der så meget. De går ikke glip af noget.

I dette tilfæde vil jeg forsøge at isolere en eller to typer af arbejde i hver linje. Hver linje resulterer i en datafil som er den næste tilstand. Det er en noget batch orienteret måde at gøre det på men jeg kan godt li denne form især ved konstruktionen. Der er også den fordel at man kan eksekvere de enkelte linjer i en bash step by step. Og det er jo faktisk definitionen på en batch kørsel.

En detalje til er at batch’en ikke selv læser i logfilen men forventer log overført gennem en PIPE. Log ryger gennem AWK der finder linjer med “Failed password” af flere typer og dataplukker de IP adresser hvorfra de fejlede forsøg kommer og hælder dem på listeform i en fil. Den næsten linje læser alle IP adresserne og filter dubletter fra i ny fil, der vil også stå hvor mange gange hver IP er fundet i logfilen. Den næste linjer udtrækker de IP adresser som er fundet mere en 2 gange og gemmer dem i drop listen.

# find ip login attempts

awk '
  BEGIN {} 
    /Failed password for root/ { print $11 }  
    /Failed password for invalid/ { print $13 } 
END {} ' > login_attempt_sources.tmp

# build list of ip's and number of login attempts
sort < login_attempt_sources.tmp | uniq -c | sort -n > login_attempt_filters.tmp

# check if outcome is same as last
if diff login_attempt_filters.tmp login_attempt_last.tmp >/dev/null ; then
  exit 0
fi
cat login_attempt_filters.tmp > login_attempt_last.tmp

# find ip with more than 3 failed login attempts
DROP=` awk '{if ($1 > 2) {printf "%s ",$2 }}' login_attempt_filters.tmp ` 

# bail out if no elements
if [ -z "$DROP" ]; then
  exit 0
fi

wall < login_attempt_filters.tmp

shorewall drop $DROP > login_attempt_shorewall.tmp

Så er der kun tilbage og overføre de uønskede IP adresser til firewall. I dette tilfæde en shorewall dynamic drop eller ipfw hvis man er på Mac.


By Frank Vilhelmsen - 3 tags: linux osx unix - 1 comment on Firewall Drop With AWK - Add comment

Theis March 19, 2010 09:37 5 months ago

Et andet godt sikkerhedstrick er at:

1. Disable root login
2. Flyt SSH porten fra 22 til noget andet

Ofte ligger hackertools og scanner ip addresser, og er der åbent for port 22 forsøger de at logge ind som root.

Jeg tror efterhånden at de fleste distributioner også laver delay på login, så hvid der svares forkert 3 gange i træk skal der ventes 5 min.