How to prevent cloning in Ibeacons and avoid conflicts among beacons? - ios

I am trying to develop one app with using a lot of beacons like say in any muti floor shopping mall. In this situation how can I control these
Suppose someone clones a beacon and starts advertsing the signal with same UUID, major, and minor, how to prevent that and what are the other security measures that can be taken?
How to avoid mutiple notifications, suppose somewhere conflicted by two beacons any area is common to more than one beacons, how to control that in app?

The iBeacon standard does not provide any built-in ways to prevent cloning. Apple restricts iOS devices from seeing iBeacons except for ones where the ProximityUUID is known, suggesting this may have been a rudimentary security attempt. But since other operating systems (Android, OSX Mavericks, Linux) allow reading identifiers of all iBeacons, this restriction seems rather silly. It is possible to read identifiers using a tool like Android iBeacon Locate and deploy your own iBeacon with the same identifiers.
Four common approaches to address this:
Do nothing. This is appropriate for most use cases where cloned beacons will cause minor consequences or for low profile deployments where the risk of someone doing this is minimal.
Rotate the iBeacon identifiers. You can do this manually by replacing beacons or manually changing their identifiers periodically. This does not eliminate the problem, but it limits the risk and impact on time.
Use an automated rotating identifier combined with an automated system for validating/converting it to a trusted identifier.
Abandon the iBeacon standard and use a proprietary beacon technology using encryption. This should be considered a last resort, because this choice makes it impossible to use widely available open source and commercial tools for working with iBeacons, and locks you into a single vendor.
Before you choose any option other than the first, be sure you carefully evaluate the risk and consequences of cloning, and be sure any countermeasure you take is really worth the downsides.
The multiple notification problem described in the question is generally not an issue in the absence of intentional cloning. Simply design the ProximityUUID/major/minor numbers of your beacons to be unique for each event you wish to give to users and make your app respond appropriately.

For beacon clone:
customize your beacon firmware and encrypt major/minor with a random key. If beacon and app both can access to cloud, maybe exchange random key via cloud to encrypt/decrypt the major/minor id. If no cloud is involved, beacon and app need to deal with a random key generating algorithm, ex use time as a seed.
(Encrypt with a forever fixed key is useless because clone or replay beacon advertising data still can cheat app)
Rotate UUID with a predefined table-based list. This just reduces the risk with a periodically changing UUID but not really fix the security issue. And the UUID list has a limited size because all UUIDs in list may need to pre-register in App, ex iOS, to let iOS take it as a recognized region and then pass data to your App.
For Multi-notification:
Usually, this should be handled by App.
When enter a region or beacon trigger callback, app should check if it is a duplicated region by uuid-major-minor info. App should also check if it is related notification/info has been sent to user or not to avoid user be bothered by duplicated notification.

Related

Automatic iBeacon support in Cars

Do all Cars that support Bluetooth also automiatically support iBeacon without any additional work?
I want to test if the user is currently I his/her car. According to this question, this is generally not possible but iBeacon may be a solution. Thus, my question is if iBeacon is always supported by a Car if it has Bluetooth or if special hardware is required.
No, not all Bluetooth enabled cars emit iBeacon transmissions. I can say this with certainty as my 2017 Mini Cooper pairs over Bluetooth yet does not emit an iBeacon transmission.
I also rent late model cars relatively frequently and am the developer of a number of beacon detector apps. While I have not explicitly tested all vehicles I have rented, I have never once noticed one triggering a detector app. My conclusion is that few if any vehicles emit iBeacon transmissions in general use.
I have worked with an insurance provider that provides beacons to be installed in customer cars (typically plugged in to a USB adapter) allowing vehicle usage tracking with the company app in exchange for a discount. An extra hardware solution like this would be required to accomplish your goal with iBeacon.
Not sure this is an alternative for you, but you could place a beacon in the car and have an app on your phone detect it and perform an action on that fact. Of course the app then would have to run also when the phone and the app are not actively used.
NFC could also be used this way, provided the phone is always placed in a holder.

How do iBeacon apps 'communicate' with an online platform?

Apologies if this has been answered in some way shape or form many times before - I am new to this area.
If you are familiar with iBeacons, you are probably familiar with the concept of proximity marketing; iBeacons broadcast their signals, the users app picks up on this signal and does something accordingly. My question is how does the app know what to do, does it communicate with a server?
The field of 'proximity marketing' hosts many different online platforms that allow app owners to add their beacons and manage dynamic marketing campaigns - meaning this 'content' is accumulated by the app through communication of some sort.
Example: https://beaconcontrol.io/
BeaconControl (open source proximity marketing platform) quotes this on their website:-
"It's Open Source. Built with Ruby On Rails. Customizable Ruby Engines (plug-in support). MySQL and PostgreSQL support. Uses Redis for backend tasks. REST JSON API. Hosted on GitHub. Deployable with Capistrano to your own server. Deployable to heroku."
If someone could set me off in the right direction that would be great!
Thanks and regards,
Olly
iBeacon devices transmit their own unique identification number to the nearby area. A specific app on a mobile device is continiously looking up (sniffing) for iBeacon frames and parses unique identification numbers (UUID, Major, Minor values) from the captured devices. Then the app sends this identification number to the dedicated server and based on this numbers, it triggers some action on the mobile device, such as an auto check-in, or delivery of a push notification, etc.

how to scan available beacons in my region iOS

I am new to beacon coding.
Our client want a app which will scan all the available beacon devices (manufactured by client itself)
I want to write a generic code which will scan for all available devices near by, and will show me alert on particular command,
like it will blow GREEN light when call is there, Yellow light when Message received etc.
I have the commands provided, but need a methods for beacon to call those commands, in iOS.
first target is to scan all available devices.
On sample I found some tutorials which are providing direct UUID
but I need to generate a code which will scan all.
any links and other info is welcome.
Thanks in advance..
Apple restricts the ability to scan for iBeacons on iOS so that you must know the beacons' ProximityUUIDs up front. There is no way to simply scan for all iBeacons regardless of ProximityUUID using public APIs. While there are private API hacks that may allow this, these will not allow the app to be approved for distribution in the AppStore.
If you can get a finite list of known ProximityUUIDs for your client, this will still work OK. You can call CoreLocation's startRangingBeaconsInRegion: command multiple times, once for each ProxinityUUID. While there is no hard limit on the number of times you can call this (unlike monitoring APIs which have a limit of 20 regions), practically you can probably only call this in the low hundreds of times.
Bottom line: while you cannot scan for all beacons regardless of ProxinityUUID, you can get close to the same effect if you know all the UUIDs up front.

How to pair ibeacon with iOS first time programmatically

I started with ibeacon-based(actually— lock) device development+iOS application. I can provide to iOS app the minor and major+ UUID of beacon. But, it is good only for testing.
And what if the customer bought my device and want to pair with self.iOS application. For having a unique key to opening/closing device? Sure, i can write in code the common major/minor for all my devices, but it is foolish and insecure, right? Any user with my app can open the lock with 1 tap.
So, can you help me to understand how i can pair 1 unique iPhone with 1 unique ibeacon(but they all mine) to have an 1 unique pair to communicate?
I need to do it at the 1st time after unboxing the lock.
Why don't you require the user to register to a web service after app installation, and then download the UUID/major/minor from the web service and store the identifiers in the app?
If you are distributing user-specific hardware beacons, you can have an activation code associated with each beacon that is entered as part of the registration process. One code must be tied to a UUID/major/minor on the back end.
Keep in mind that once the beacon is transmitting, anybody can read the beacon identifiers over the air using Android, Linux or OSX. So make sure your system is adequately secure.

Preventing an iOS app from getting mock locations

Is it possible to make sure that GPS positions an iOS app is getting are real, and they are not fake locations illegitimately provided somehow, for example, by means of another app such as LocationHolic?
Thanks!
You could theoretically do some ip number geo lookup (e.g. How does geographic lookup by IP work?), but that's not entirely reliable (e.g. VPNs), so I'd be hesitant to dispute someone's location on the basis of that. Given that locationholic is for jailbroken devices, perhaps validate location information against ip-derived location info if, and only if, the app is running on jailbroken device. For info re ip number based geo lookup or identifying if a device is jailbroken, I'm expert in neither, but both topics are covered well elsewhere on StackOverflow or can be answered with a google search.
In short, I suspect that locations are reliable on non-jail-broken phones. Regarding "Find My iPad/iPhone" on jail-broken phones, I can't speak to that, but all rules of reliability and security are thrown out of the window on jail-broken devices, so you can't rely on it.

Resources