Hacker News new | ask | show | jobs
by jboggan 4267 days ago
The physical security on units such as these, or the majority of newly manufactured Bitcoin ATMs, is a joke. There's a good reason to build a large, heavy safe into an ATM, and all but the very strongest and most expensive can be broken into trivially. Bitcoin ATMs are even worse than cash ATMs from this perspective because physical compromise of the machine potentially nets you private keys.

Small/cheap units like this also don't support industry standard features like Mas locks or other one-time-combination locks to allow third party security and cash replenishment organizations to service them. [0] A used Mas lock (or its equivalent) will run you at least $500 and newer units are easily over $1,000 [1]

I'm speaking as a former ATM technician.

0 - http://www.kaba-mas.com/kaba-brand/products/366024/cencon.ht... 1 - http://www.jmacsupply.com/Kaba_Mas_X09SRD00FZJEZ1A_p/KABA-MA...

2 comments

I agree with you that the locks aren't the best possible. Skyhooks wouldn't be a particularly great choice for an outdoor mall or a shady alleyway (they're not waterproof anyways), but they're perfect for cafes, small businesses, meetups, etc. I haven't heard a single report of a stolen or compromised Skyhook yet, and hundreds have been shipped. I don't think this is as big of a problem as it's made out to be.

Instead of making the entire unit expensively heavy, we opted to provide a way to bolt the unit onto something else, via 4 thick screws on the bottom of the unit with a heavy mounting plate, and supply that with purchase. That way, the ATM is either portable (a lot of people like to take them to Bitcoin meetups or swaps), or you can optionally secure it to something very difficult to steal. That way, you get a choice.

If the unit is removed from the wall, the unit detects that it has been powered off and locks the system, requiring the operator password to unlock it. It's not perfect security, but it's pretty good.

Skyhooks don't have protection from Denial of Service attacks from God yet though, unfortunately: http://www.coindesk.com/arizonas-first-bitcoin-atm-struck-li...

If the password on boot option actually encrypts something, wouldn't that solve the problem?
That's what it currently does.
The code seems to suggest this was written by someone that isn't all that versed in crypto, which is more than a little worrying for an ATM:

hash_pbkdf2('sha256', $password, $salt, self::ITERATIONS, $saltSize, true);

where self::ITERATIONS is 500. That's extremely low.

Furthermore, they're using CBC mode encryption for the 'config' file rather than an authenticated cipher. The only 'authentication' there is is whether the file inflates. Because the IV is in the encrypted file (and I can pick any password), I can make the first block decrypt as anything. Depending on when gzinflate throws an error, I could potentially make the decrypt succeed with just control over the first block.

Neither of the issues is (in this case, because it's 'just' the config file encryption) probably anything to especially worry about, but it does show that other, more critical, parts of the codebase might not be up to snuff.