Code Monkey home page Code Monkey logo

bunny's Introduction

#Bunny Bunny is intended to act as a layer 1/2 technology that attempts to hide its wireless mesh communication traffic. Bunny wraps all data in and out in a layer of obfuscation. It does this by passively listening to the local wireless and building a model of 'average' traffic. Then using this model, it hides small snippets of data within various fields of the 802.11 protocol that are either poorly defined or prone to contain data that mutates a lot. These fields will include but are not limited to, vendor data, data packets of encrypted networks, duration fields.

For full whitepaper like decription of Bunny, check proposal.txt.

You need a monitor/injection capable wireless chipset. Please check the aircrack website for compatible cards.

##Tested chipsets / cards: rtl8187 - Alfa AWUS036NH Note: These are by far the WORST chipsets on the market, the RX sensitivity makes them almost worless for any kind of application besides cracking WEP passwords. ath9k_htc - TP-LINK tl-wn722n rt2800usb - 5370 Chipset (sold with raspberry pi's) Note: Bunny works well on raspberry pi's

##Configuration Configuring bunny is as simple as editing the "libbunny/config.py" file

The most important item to modify is the IFACE varible, this sets which wireless interface you will use for Bunny.

Also if you wish to run a non-testing network, delete the 'keys.kz' file and bunny will make a new one with random values.
Distribute this file to the peers on your network. Also Modulus and Remainder values should be changed as well, for help generating mod/remain vaules check testScripts/mod.py

##Usage (bunnyChat.py example code)

sudo python bunnyChat.py

-l              --   Listen mode, gets packets and prints data
-s [data]       --   Send mode, sends packets over and over
-m              --   Passive profiling of all the channels (1-11)
-c [UserName]   --   Chat client mode
-r              --   Reloop shows the mod/remainder of the specified channel
-p              --   Ping/Pong testing, Run this on one machine and it will
					 respond with a pong.
-k              --   Ping server mode, will repsond to pings with pong and current time

##Usage of the module import libbunny

bunny = libbunny.Bunny()
bunny.sendBunny(DATA)

while True:
	print bunny.recvBunny()
bunny.killBunny()

The modules aspect of Bunny is under-developed currently, the key file needs to be more controlable through the API and BunnyExceptions need to be built out and used

##Dependencies

pycrypto
keyczar
	pyasn1
lorcon2 (current)
pylorcon2 (https://code.google.com/p/pylorcon2/)
pcapy

##Installation Check INSTALL file

##TODO

Routing layers and support for projects to be built ontop of what I have done like cjdns and others

Attempt to make a bunny tun device so testing with the batman-adv kernal module.

Create a packaged version with dependencies to reduce the install time.

##Bugs Due to this (https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=500041) bug in pcapy, at least on Arch linux I had to NOT use the offical upstream but the packaged AUR here: https://aur.archlinux.org/packages/python2-pcapy/

Sometimes on ubuntu there is a rfkill block when trying to bring up an interface and you might see: SIOCSIFFLAGS: Operation not possible due to RF-kill

you can solve this temporarly by: sudo rfkill unblock wifi

bunny's People

Contributors

barbeque avatar mothran avatar rukku avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

bunny's Issues

Chat client exception

So I found another one while running the chat client, just pops up at random intervals. Afterwards the machine is able to transmit but not receive. Am only able to replicate this error on kali linux, ubuntu seems to be fine.

Exception in thread BunnyReadThread:
Traceback (most recent call last):
File "/usr/lib/python2.7/threading.py", line 552, in __bootstrap_inner
self.run()
File "/root/bunnymk4/bunny/libbunny/bunny.py", line 203, in run
temp = type[2].decode(encoded)
File "/root/bunnymk4/bunny/libbunny/Templates.py", line 262, in decode
size, = struct.unpack("B", input[26:27])
error: unpack requires a string argument of length 1

Looked at the code but having trouble to grasp whats going on.

Implement more packet types

Currently as of 935417f Bunny only has:
Beacon,
DataQOS,
ProbeRequest

Types templated out, this needs to expand to as many types as possible.

Ping pong transfer time error

The last update fixed the chat client but it did something to the ping pong. Pings are sent and received, pong is sent but not received and when it tries to print the summary eg. packets loss etc. it trows and exception when trying to calculate the transfer time.

root@bt:~/bunnymk2/bunny# python bunnyChat.py -p
ping timeout
ping timeout
ping timeout
ping timeout
ping timeout
ping timeout
ping timeout
ping timeout
ping timeout
ping timeout
received: 0 packets
Percent recv'd: 0.000000%
Traceback (most recent call last):
File "bunnyChat.py", line 246, in
main()
File "bunnyChat.py", line 192, in main
print "Mean time: %f" % (avg_time / count)
ZeroDivisionError: integer division or modulo by zero

Quick fix:
in bunnyChat.py line 192, change:
print "Mean time: %f" % (avg_time / count)
into:
if count > 0:
print "Mean time: %f" % (avg_time / count)

Static Symmetric Keys

Bunny uses static symmetric keys. These keys found in keys.kz are known by an attacker, so they could easily write a program to decrypt traffic sent by bunny. Solutions include PKI, pre-shared keys, passwords, and so forth. All of these have their own difficulties. Secure crypto is difficult.

scapy implementations

Hello,

I'm curious to know how many packets per second you can rx/tx effectively. I use/would use scapy for a project like this. Would be interesting to collaborate with you on it.

Exception when running chat client

Awesome work!!
When I run the chat client or just listen for a while it sometimes throws the following exception:

Exception in thread BunnyReadThread:
Traceback (most recent call last):
File "/usr/lib/python2.7/threading.py", line 552, in __bootstrap_inner
self.run()
File "/root/bunny/libbunny/bunny.py", line 191, in run
temp = type[2].decode(encoded)
File "/root/bunny/libbunny/Templates.py", line 359, in decode
return temp_tags[0][2]
IndexError: list index out of range

For as far as Ive been able to figure out it does not affect the usage of the client.

NetworkManager unmanage devices dynamically

Currently if NetworkManager is present, Bunny will be interrupted and the interface will usually be brought back to managed mode from monitor. This can be solved currently by adding the following line to /etc/NetworkManager/NetworkManager.conf:

[keyfile]
unmanaged-devices=mac:<MAC_ADDRESS_HERE>

I have tried looking at nmcli and the dbus interface and there does not appear to currently be a way to force NetworkManager to set a device as unmanaged dynamically. There appears to be an open ticket for this functionality here: https://bugzilla.gnome.org/show_bug.cgi?id=680909

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.