Differences in wireless security

Submitted by Jochus on Mon, 25/02/2013 - 23:10 | Posted in: Linux
Posted in

I just found this old article I've written down once when I was looking for a good wireless security setup. This article was written in Dutch, but I didn't want it to get lost, so I added it to my blog.

Versleutelingsmethodes

WEP

Definitie

WEP staat voor Wired Equivalent Privacy en is een door de Institute of Electrical and Electronics Engineers 802.11 gespecificeerde methode om berichten die via een draadloze verbinding (Wi-Fi) worden verstuurd te versleutelen en maakt gebruik van de RC4-encryptie van RSA Security. De versleuteling vindt plaats tussen de twee NICs; de versleuteling geldt dus alleen voor zover de data "in de lucht hangt". Nadat de data ontvangen is, is het niet meer encrypted. Om gebruik te maken van WEP moeten de participerende NICs WEP aanzetten en een gelijke sleutel ingevoerd krijgen.

Bron: http://nl.wikipedia.org/wiki/WEP

Werking
  • Van de te verzenden data wordt een CRC32-checksum berekend. Deze checksum wordt achter de data geplakt.
  • Het nieuwe geheel (Data + CRC32(Data)) wordt de 'plaintext' genoemd. ('Plain', omdat dit stuk nog niet gecodeerd is en dus gewoon leesbaar.)
  • De keystream wordt als volgt berekend: keystream = RC4(IV, sleutel).
    • IV = initiële vectoren. Dit zijn een aantal willekeurige getallen die mogen, maar NIET moeten (volgens de IEEE WEP-specificaties), veranderen bij elk nieuw verzonden pakket.
    • sleutel = een afgesproken 'wachtwoord' dat gebruikt wordt, en door beide NIC's op voorhand gekend is.
  • Het pakket wordt samengesteld: Eerst worden de keystream en plaintext tezamen ge-XOR'd, en vervolgens wordt de IV voor het pakketje geplakt. Dan wordt het pakket verzonden.

Kort samengevat:

:pakket = IV + XOR(data + crc32(data), RC4(IV, sleutel))

Bron: http://nl.wikipedia.org/wiki/WEP

Persoonlijke mening

WEP is totaal niet veilig en kan in minder dan een seconde gekraakt worden. Dit komt vooral door de statische sleutel die in het algoritme gebruikt wordt. Bij deze raad ik dan WEP ook aan niemand aan.

WPA

Definitie

Wi-Fi Protected Access (WPA) is een systeem om veilige draadloos draadloze netwerken (Wi-Fi) op te zetten en is ontwikkeld nadat onderzoekers een aantal zwakke plekken in WEP (Wired Equivalent Privacy) hadden gevonden. WPA is gebaseerd op een deel van de 802.11i-standaard van IEEE en bedoeld als tussenoplossing voor de problemen met WEP terwijl de nieuwe draadloze veiligheidsstandaard (802.11i) werd ontwikkeld. Certificatie van producten met WPA is begonnen in april 2003; de volledige 802.11i werd geratificeerd in juni 2004.

Werking

WPA kent 2 manieren van configureren: personal en enterprise. Enterprise vereist een authenticatieserver en wordt meer gebruikt in bedrijven. Personal kan je thuis gebruiken.

WPA lost eigenlijk het probleem van de WEP hoofding (de initialisatie vectoren IV) op en voorziet een betere beveiliging door gebruik te maken van het MIC (Messsage Integrity Check). Deze laatste maakt gebruik van het TKIP protocol (Temporal Key Integrity Protocol). Concreet wil dit zeggen dat WPA de sleutel automatisch aanpast (''rekeying'' genoemd). Dit proces gebeurt na een periode van X tijd of na X aantal pakketten verzonden te hebben = the rekey interval.

WPA maakt gebruikt van een passphrase, of ook wel de geheime code genomed die zowel moet ingevoerd worden op je router als op je computer. Vervolgens neemt TKIP het proces over en past dit de sleutel automatisch aan.

WPA is niet geklasseerd als een standaard, maar is eigenlijk een oplossing tussen WEP en WPA2 (zie verder)

Persoonlijke mening

Stuk veiliger dan WEP en zeker aan te raden!

WPA2

Definitie

WPA2 is de nieuwste beveiligings methode in de Wifi wereld. De ondersteuning is nog matig en WPA voldoet zeker nog aan de veiligheidsnorm voor de thuisgebruikers.

WPA2 is er net als WPA in 2 varianten, de Enterprice en de Personal.

De Personal variant werkt ook met een in te vullen wachtwoord zoals bij WPA, en de Enterprice variant werkt via een aparte authenticatie server.

WPA2 maakt gebruik van AES (Advanced Encyption Standard) een commercieël en overheids ondersteunde data pakket beveiliging.

Werking

AES is de nieuwe methode voor de bescherming van persoonlijke gegevens bij draadloze transmissies die wordt gespecificeerd in de IEEE 802.11i-standaard. AES-CCMP biedt een krachtigere coderingsmethode dan TKIP. Kies AES-CCMP als methode voor de gegevenscodering als een sterke bescherming van gegevens voor u van belang is.

Persoonlijke mening

WPA2 geniet mijn persoonlijke voorkeur wegens de sterke codering van AES. Toch echter 1 minpunt: een standaard Windows XP installatie kan niet omgaan met WPA2 en heeft nood aan deze update: http://www.microsoft.com/downloads/details.aspx?familyid=662BB74D-E7C1-…

Toegangsmethodes

MAC filtering

Definitie en werking

MAC adressen filteren is een beveiligingsmethode die vaak in combinatie met encryptie gebruikt wordt. Een MAC adres (ook wel 'hardware adres' of 'fysiek adres' genoemd) is een ingebakken adres dat uniek is voor elk netwerkapparaat. Het MAC adres is een hexadecimale code van twaalf tekens, bijvoorbeeld 00-C0-26-A9-42-F7. Deze code kan gebruikt worden om toegang tot het netwerk toe te zeggen of juist te blokkeren. In feite is het erg gemakkelijk.

Persoonlijke mening

In mijn ogen deftige beveiligingstechniek, alhoewel deze terug mooi kan omzeild worden door MAC-spoofing. MAC-spoofing? Dat is een techniek waar je toch die hexadecimale code kan aanpassen en je voordoen als iemand anders ...

Configuring wireless networks with WPA2 security on old Ubuntu installations

Submitted by Jochus on Sun, 24/02/2013 - 10:32 | Posted in: Linux
Posted in

I just found this old article I've written down once to configure wireless networks with WPA2 security on old Ubuntu installations. As of today, WPA2 is supported out-of-the-box by the latest versions of Ubuntu. This article was written in Dutch, but I didn't want it to get lost, so I added it to my blog.
  • Installeer wpa-supplicant
  • $ sudo aptitude install wpasupplicant

  • Controleer dat je draadloze netwerkkaart goed ondersteund wordt. Door onderstaande commando's uit te voeren, zou je netwerkkaart moeten herkend zijn. Bij errors => verder zoeken om draadloze netwerkkaart te configureren
  • $ iwconfig && iwlist scan

  • Ga naar /etc/network/interfaces en pas de code voor jouw draadloze netwerkinterface aan:
  • auto eth1
    iface eth1 inet dhcp
    wpa-driver wext
    wpa-ssid <YOUR_SSID_HERE>
    wpa-ap-scan 1
    wpa-proto RSN
    wpa-pairwise CCMP
    wpa-group CCMP
    wpa-key-mgmt WPA-PSK
    wpa-psk <YOUR_KEY_HERE>

auto eth1

  • Jouw netwerkkaart (kan ook wlan0, rausb0, ra0, ... zijn)

iface eth1 inet dhcp

  • Een IP-adres wordt geleverd door de DHCP-server

wpa-driver

  • Dit is de WPA-driver voor jouw kaart. wext is een generische driver die toepasbaar is als je met ndiswrapper werkt. Laat dit standaard staan. Je kan ook andere drivers selecteren

* hostap = Host AP driver (Intersil Prism2/2.5/3)
* atmel = ATMEL AT76C5XXx (USB, PCMCIA)
* wext = Linux wireless extensions (generic)
* madwifi = Atheros
* wired = wpa_supplicant wired Ethernet driver

wpa-ssid

  • Jouw network SSID (zonder quotes!)

wpa-ap-scan

* 1 = Broadcast van ESSID
* 2 = Verborgen broadcast van ESSID

wpa-proto

* WPA = WPA
* RSN = WPA2

wpa-pairwise & wpa-group

* TKIP = TKIP encryptiealgoritme als onderdeel van de WPA standaard
* CCMP = AES encryptiealgoritme als onderdeel van de WPA2 standaard

wpa-key-mgmt

* WPA-PSK = Authenticatie van voorafgesproken sleutel (zie verder!!!)
* WPA-EAP = Authenticatie via een 'enterprise authentication server'

  • Nu moeten we nog onze WPA key omzetten naar een hash waarde zodat deze niet letterlijk blijft staan in onze config file
  • $ wpa_passphrase <your_essid> <your_ascii_key>

  • Dit levert zoiets als
  • network={
       ssid="test"
       #psk="12345678"
       psk=fe727aa8b64ac9b3f54c72432da14faed933ea511ecab15bbc6c52e7522f709a
    }

  • De hex_key waarde die je naast psk vindt, moet je onder wpa-psk zetten van het /etc/network/interfaces bestand
  • Herstart je netwerk
  • $ sudo /etc/init.d/networking restart

Setting up a splash image on Ubuntu 11.10 (oneiric) and Grub 1.99

Submitted by Jochus on Sat, 23/02/2013 - 10:20 | Posted in: Linux
Posted in

Choosing a Grub background image

  • You can pick an image yourself, or you can use one of the default Grub images:
    $ sudo aptitude install grub2-splashimages
  • Once installed, the images are located in the /usr/share/images/grub folder

Installing splash Images

  • Check your version of Grub (this blogpost was tested with Grub 1.99):
    $ grub-install -v
  • Open /etc/default/grub with a text editor an add the following line:
    GRUB_BACKGROUND=/path/to/your/image 
  • Update GRUB to incorporate the image into the menu:
  • $ sudo update-grub

Changing text colors

  • To add menu_color_normal and/or menu_color_highlight values when using a splash image
  • Open /etc/grub.d/05_debian_theme as root
  • Find the following lines:
  • if [ -z "${2}" ] && [ -z "${3}" ]; then
        echo "  true"
    fi

  • Change the entry to the following, replacing 'color1' and 'color2' to the desired colors. Leave /black as is!
  • if [ -z "${2}" ] && [ -z "${3}" ]; then
        # echo "  true"
        echo "    set color_highlight=color1/color2"
        echo "    set color_normal=color1/black"
    fi

  • Save the file and run update-grub

Setting up Samba on a Linux installation

Submitted by Jochus on Fri, 22/02/2013 - 23:21 | Posted in: Linux
Posted in

I just found this old article I've written down once to configure Samba on a Linux installation. This article was written in Dutch, but I didn't want it to get lost, so I added it to my blog.

Installatie Samba

  • Installatie pakket
  • $ sudo aptitude install samba

  • Ga naar /etc/samba/smb.conf en pas volgende wijzingen toe:
  • Toegang tot werkgroep:
  • # Change this to the workgroup/NT-domain name your Samba server will part of
       workgroup = MSHOME

  • Netwerknaam computer:
  • # server string is the equivalent of the NT Description field
       server string = %h server (Samba, Ubuntu)

  • Sharen van de home folder:
  • # Un-comment the following (and tweak the other settings below to suit)
    # to enable the default home directory shares.  This will share each
    # user's home directory as \\server\username
    [homes]
       comment = Home Directories
       browseable = yes
     
    # By default, \\server\username shares can be connected to by anyone
    # with access to the samba server.  Un-comment the following parameter
    # to make sure that only "username" can connect to \\server\username
    # This might need tweaking when using external authentication schemes
    ;   valid users = %S
     
    # By default, the home directories are exported read-only. Change next
    # parameter to 'yes' if you want to be able to write to them.
       writable = yes

  • Toevoegen gebruiker aan SMB PASSW DB:
  • $ sudo smbpasswd -a jochus
    New SMB password:
    Retype new SMB password:

  • Herstart Samba
  • $ sudo /etc/init.d/samba restart

Installatie SMBFS

  • Verder wil ik ook mijn windows-server data schijf kunnen mounten. Er zijn hiervoor 2 mogelijkheden. Ofwel gebruik je een commandline tooltje als ''smbclient'', ofwel ga je data schijf mounten alsof het echte harde schijven zijn
  • Installeer smbfs
  • $ sudo aptitude install smbfs

  • Om andere gebruikers de map te kunnen mounten, moeten we deze ook rechten geven
  • $ sudo chmod u+s /usr/bin/smbmnt /usr/bin/smbumount

  • Maak een mount point aan
  • $ sudo mkdir /mnt/data

  • Om aan de schijf te kunnen geraken moeten we inloggen met Windows credentials
  • $ sudo nano /etc/samba/user

  • Vul in
  • USERNAME
    PASSWORD

  • Voor de veiligheid
  • $ sudo chmod 0600 /etc/samba/user

  • Voeg aan /etc/fstab het volgende toe:
  • //server/share   /mnt/data   smbfs   credentials=/etc/samba/user,rw,uid=bob   0   0

  • Mounten gaat nu via:
  • $ mount /mnt/data

Testing the Graph API of Facebook

Submitted by Jochus on Thu, 21/02/2013 - 23:56 | Posted in: Java
Posted in


I just tested the "new" (already in Facebook since June 2011) Graph API of Facebook. Using the RestFB Java client (http://www.restfb.com/), I was able to get a list of my friends, update my status, ... etc, etc. For testing, I retrieved an access token using the Graph Explorer tool (https://developers.facebook.com/tools/explorer).

Java project setup (pom.xml)

<project>
	<modelVersion>4.0.0</modelVersion>
	<groupId>be.jochenhebbrecht</groupId>
	<artifactId>facebook-test</artifactId>
	<version>1.0.0-SNAPSHOT</version>
 
	<dependencies>
		<dependency>
			<groupId>com.restfb</groupId>
			<artifactId>restfb</artifactId>
			<version>1.6.11</version>
		</dependency>
	</dependencies>
</project>

Getting a list of friends

import com.restfb.Connection;
import com.restfb.DefaultFacebookClient;
import com.restfb.FacebookClient;
import com.restfb.types.User;
 
public class FacebookTest {
 
	private static final String MY_ACCESS_TOKEN = "##REPLACE_ME##";
 
	public static void main(String[] args) {
		FacebookClient facebookClient = new DefaultFacebookClient(MY_ACCESS_TOKEN);
		Connection<User> myFriends = facebookClient.fetchConnection("me/friends", User.class);
 
		for (User u : myFriends.getData()) {
			System.out.println(u.getName());
		}
        }
}

Updating my status

import com.restfb.DefaultFacebookClient;
import com.restfb.FacebookClient;
import com.restfb.Parameter;
import com.restfb.types.FacebookType;
 
public class FacebookTest {
 
	private static final String MY_ACCESS_TOKEN = "##REPLACE_ME##";
 
	public static void main(String[] args) {
		FacebookClient facebookClient = new DefaultFacebookClient(MY_ACCESS_TOKEN);
		FacebookType publishMessageResponse = facebookClient.publish("me/feed", FacebookType.class, Parameter.with("message", "Test from Graph API"));
		System.out.println("Published message ID: " + publishMessageResponse.getId());
        }
}

Kerio Mail Server: Cannot access message 0000000x in folder ~someone@somedomain.com/INBOX

Submitted by Jochus on Thu, 21/02/2013 - 22:45 | Posted in: Windows
Posted in

Problem

The following error appeared in the error.log of my Kerio Mail server:

Cannot access message 0000000x in folder ~<a href="mailto:someone@somedomain.com">someone@somedomain.com</a>/INBOX

Solution

In most of the cases, Kerio Mail Server is smart enough to repair the errors by itself. But in some cases, it just doesn't work. Manual repair is required.

  • Make sure all your clients are disconnected from the server - so you won't have any active sessions left
  • Go to the folder: /store/mail/domain/user/folder_name/
  • Rename the file index.fld to index.fld.bad
  • Now connect again with your user. Kerio Mail Server will see the index file is missing and it will automatically rebuild it. This step can take a while for very large mail folders!

Automatic user login in Windows

Submitted by Jochus on Thu, 21/02/2013 - 22:06 | Posted in: Windows
Posted in

Problem

When you're having multiple users on your windows installation, the system will always ask you which user should be used to login. But in some cases, you always want to login automatically with the same user (because the 2nd, 3rd, ... user are almost not used). How to achieve the automatic login?

Solution

Go to:

  • Start > Run
  • Type: control userpasswords2
  • Unhceck: Users must enter a user name and password to use this computer
  • Press OK
  • The system will ask you now for the default username and password (2x). This user will be used to automatically log in

Linux bridging alternative

Submitted by Jochus on Wed, 20/02/2013 - 22:37 | Posted in: Linux
Posted in
I just found this old article I've written down once to simulate a Linux network bridging alternative. This article was written in Dutch, but I didn't want it to get lost, so I added it to my blog.

Probleem

Enkele jaren heb ik gretig gebruik gemaakt van een Windows 2003 serverke. Maar het toestel werd oud en traag en was dringend aan vervanging toe.
Bij het opzetten van een nieuwe server heb ik gekozen voor Ubuntu, omdat ik al veel positieve dingen gehoord/gelezen heb qua servers & Linux. Bovendien was het zeker niet slecht om mijn CV wat aan te vullen ;-)

Goed, 1 van de vereisten is dat mijn server als netwerk brug functioneert. Waarom? Dat valt hier eigenlijk buiten de scope van het document, maar het is bedoeld om een printer en andere DHCP clients te voorzien via HUB en de server richting het internet (en ook andere DHCP clients in het gebouw)

Bij de windows server ging dat perfect. Je selecteert 2 verbindingen: de wired en de wireless, en je kiest voor Netwerk brug maken...
De rest gebeurt van zelf, en klaar is kees :-).

Bij Linux was dit probleem precies iets anders. Er is genoeg documentatie te vinden over het bridgen van 2 wired interfaces, maar niet zo veel voor wireless en wired.

Dagen heb ik zitten prutsen om de brug in orde te brengen, maar ik kreeg ze maar niet werkend.
Het probleem is als volgt: mijn Linksys WRT54GS stuurt pakketten uit die WDS informatie bevatten. Die informatie zorgt ervoor dat pakketten hetzelfde MAC adres blijven behouden over verschillende access points heen. Nu moet mijn driver van mijn netwerkkaart wel die WDS pakketten verstaan om ze deftig te kunnen doorgeven aan mijn eth0 zijde => MAC spoofing!

En dit was dus niet mogelijk, het MAC adres kon niet gespoofd worden, waardoor mijn pakketten verloren gingen ...
Met andere woorden: ik ben gesjost. Ik kon geen netwerk brug maken onder Linux en dat was voor mij wel een redelijk pain-in-the-ass.
Maar Jochus zou Jochus niet zijn, moest hij daarvoor geen oplossing hebben ...

Getroffen systemen

ROUTER

  • systeem: WRT54GS

SERVER

  • OS: Ubuntu 8.10 Intrepid
  • wireless interface: WMP54G
  • wired interface: RealTek RTL8139

CLIENTS

  • OS: Windows XP SP3
  • wired/wireless interface: doeterniettoe :-)

Oplossing

Alle clients die aangesloten zijn op mijn router, zitten het in het 192.168.1.0/32 netwerk. Ook mijn server heeft verbinding met mijn router op interface wlan0

auto wlan0
iface wlan0 inet static
address 192.168.1.100
netmask 255.255.255.0
gateway 192.168.1.1

Nu heb ik op mijn eth0 interface een 2e subnet geconfigureerd: 192.168.0.0/32. Mijn server zal instaan voor het verkeer tussen de 2 subnetten.
Maar hoe zet je zoiets op?

Configureren eth0 onder Ubuntu

  • Configureren wired connectie (eth0) in een ander subnet
  • Voeg volgende sectie toe aan: /etc/network/interfaces
  • Tip! gebruik geen gateway, want dan zal je standaard verkeer telkens naar eth0 vliegen, ipv wlan0

auto eth0
iface eth0 inet static
address 192.168.0.1
netmask 255.255.255.0

Toestaan dat IP pakketten van interface wlan0 doorgegeven worden aan eth0 en vice versa

  • Pas volgende file aan: /etc/sysctl.conf

# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1

IP pakketten herzien van bron- en doelbestemming, zodat pakketten aan de juiste PC teruggegeven worden

$ sudo iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE

Aanpassen printerconfiguratie

Op de printer zelf heb ik dan volgende configuratie ingesteld:

address: 192.168.0.2
submask: 255.255.255.0
gateway: 192.168.0.1

Op de clients moest ik ook de printer- en scannerpoort veranderen naar 192.168.0.2

===========
= PRINTER =
===========
* rechts klikken op je printer 
* Eigenschappen
* Tabblad: Poorten
* Selecteer de bestaande poort en druk op Poort configureren
* Stel IP-adres in op : 192.168.0.2
 
===========
= SCANNER =
===========
* Start
* Configuratiescherm
* Scanners & Camera's
* rechts klikken op je scanner
* Eigenschappen
* Tabblad: Netwerkinstellingen
* Stel IP-adres in op : 192.168.0.2

Aanpassen clients

Nu zijn we er nog niet. Want de pakketten zullen op de clients telkens naar 192.168.1.1 gestuurd worden (juist ja de router!). Hoe krijgen we die tot bij de server?

  • a) ... ofwel configureer je een extra route in de router, zodat via de DHCP offers de route ook wordt meegegeven
  • b) ... ofwel configureer je dit manueel op iedere client

Aangezien al mijn clients statisch ingesteld zijn, moest ik wel voor optie b) gaan.
Je moet op elke client het volgende ingeven:

$ route -p ADD 192.168.0.0 MASK 255.255.255.0 192.168.1.100

Customising your terminal with colors

Submitted by Jochus on Wed, 20/02/2013 - 22:11 | Posted in: Mac
Posted in

Problem

In my terminal, I like to have the words username@machinename colored. This makes it more easy to separate different commands.

Solution

Add following rule(s) to ~/.bashrc:

User

  • Linux

PS1='\[\033[01;32m\]\u@\h \[\033[01;34m\]\w \$ \[\033[00m\]'

  • Mac OS X

PS1='\[\033[1;32m\]\u@\h\[\033[0m\] \[\033[1;36m\]\w\[\033[0m\] $ '
CLICOLOR=1
LSCOLORS=ExFxBxDxCxegedabagacad

root

PS1='\[\033[01;31m\]\u@\h \[\033[01;34m\]\w \$ \[\033[00m\]'