13th May 2012


FakeIKEd, or fiked for short, is a fake IKE daemon supporting just enough of the standards and Cisco extensions to attack commonly found insecure Cisco VPN PSK+XAUTH based IPsec authentication setups in what could be described as a semi MitM attack. Fiked can impersonate a VPN gateway’s IKE responder in order to capture XAUTH login credentials; it doesn’t currently do the client part of full MitM.

Fiked is partially based on low-level ISAKMP packet manipulation code taken from vpnc and uses libgcrypt and optionally libnet.

Fiked supports IKEv1 in aggressive mode, using pre-shared keys and XAUTH. Supported algorithms are DES, 3DES, AES-128, AES-192, AES-256; MD5, SHA1; and DH groups 1, 2 and 5. IKE main mode is not supported.

There is a FreeBSD Port security/fiked, and you may track releases on FreshMeat at projects/fiked. For hackers, there is a public source code repository hosted by GitHub.

The Attack

Basically, if you know the pre-shared key, also known as shared secret or group password, you can play Man in the Middle, impersonate the VPN gateway in IKE phase 1, and learn XAUTH user credentials in phase 2.

This attack is not new. It has been known for a long time that IKE using PSK with XAUTH is insecure, and this is not the first actual implementation of the attack.

To successfully demonstrate an attack on a VPN site, you need to know the shared secret, and you must be able to intercept the IKE traffic between the clients and the VPN gateway.

There are several ways to find out the shared secret, including being a legitimate user, grabbing it from some Cisco config file, using ike-crack, or layer 8 hackery.

There are also several ways to redirect the IKE traffic to your running fiked instance, including ARP spoofing, 802.11 hostap, or layer 1 hackery.


Usage: fiked [-rdqhV] -g gw -k id:psk [-k ..] [-u user] [-l file] [-L file]
        -r      use raw socket: forge ip src addr to match <gateway> (disables -u)
        -d      detach from tty and run as a daemon (implies -q)
        -q      be quiet, don't write anything to stdout
        -h      print help and exit
        -V      print version and exit
        -g gw   VPN gateway address to impersonate
        -k i:k  pre-shared key aka. group password, shared secret, prefixed
                with its group/key id (first -k sets default)
        -u user drop privileges to unprivileged user account
        -l file append results to credential log file
        -L file verbous logging to file instead of stdout

See the README file and fiked(1) manpage for more details.

Fiked builds and runs on FreeBSD, OpenBSD and Linux, and probably other BSD variants too. MacOS X is reported not to work. Please send me patches or problem reports. All you should need are the library dependencies, a C99 capable GCC (3.2.x is fine), and GNU make.

Related Information

In the Press

Fork me on GitHub