Como invadi as máquinas de venda automática modernas

author
4 minutes, 22 seconds Read
Originalmente publicado por Matteo Pisani em 10 de outubro de 2018 192,920 lê

“Hitting and kicking” the bundled App of their widest European distribution company.

PREFACE

Indisputavelmente, Vending Machines are objects of cult. Deliciosos pedacinhos de Hackers, sempre. No início eles trabalhavam offline apenas com moedas, então, os modelos de chaves/cartões NFC- começaram a se espalhar. Se eu disser “COGES” tenho a certeza de que tempos melhores virão à mente de alguém. Mas… Num monte de anos as coisas mudaram radicalmente. Você se distrai e um momento depois, descobre que o mundo foi substituído por coisas ligadas à internet…

STORY

Um dia decidi interromper o tempero no bat-cave e ir direto para a minha cidade natal para pegar um pouco de sol, então fui para a Universidade para saudar um velho professor.

“Vá tomar um café!” – ele disse – e começamos a conversar enquanto andávamos pelo corredor principal.

Agora chegou…

Mim: “Deixa-me pagar, eu tenho moedas!”.
Him: “Espera, espera! Deixa-me usar a aplicação da máquina automática para pagar, o café será mais barato”.

BLE + NFC

Cérebro: “Mmm… Carteiras virtuais são coisas legais…”.

Excellent.

HOT-POT

Soul: “Eu te desafio a Hackear isso!”

~$ Voz interior do chapéu branco: “apenas palmadinhas no ombro se não houver recompensa de recompensa de insecto”.
~$ Voz interior do chapéu cinzento: “ok, vou fazer isso apenas para fins educativos”.
~$ Voz interior do chapéu preto: “Vá lá meu, vamos lixar aquele HEAP, grande Júpiter!”.

Mais tarde nesse dia…

Pwnie express.

ANÁLISE

Needless para dizer que peguei no meu smartphone Android sujo enraizado (com USB Debugging Enabled), instalei o aplicativo alvo a partir da Play Store e despejei o original *.apk para o meu laptop via adb.

# adb pull /data/app/com.sitael.vending-1/base.apk ./Argenta.apk

Descompilei o *.apk com apktool

# apktool d ./Argenta.apk -o ./Argenta

e extraí fontes Java com jadx

# jadx ./Argenta.apk 

Primeiro, eu fiz o *.apk debuggable editando o arquivo AndroidManifest.xml adicionando a propriedade android:debuggable="true" ao arquivo application <tag>

Então, eu reconstruí o *.apk

# apktool b ./Argenta

crevi uma nova chave com o keytool

# keytool -genkey -v -keystore Argenta.keystore -alias Argenta -keyalg RSA -keysize 2048 -validity 10000

assinei o *.apk com o jarsigner usando a chave gerada

# jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore Argenta.keystore Argenta.apk Argenta

lastly, eu alinhei o zip para torná-lo executável

# zipalign -v 4 Argenta.apk Argenta-signed.apk

e instalei o final *.apk

# adb install ./Argenta-signed.apk

Fiz a aplicação no smartphone e comecei a procurar logs com logcat, filtrando-os através do nome do pacote

# adb logcat --pid=`adb shell pidof -s com.sitael.vending`

Nada especial encontrada, então comecei a pentear através dos códigos fonte procurando por informações suculentas.

>

Localizando melhor em AndroidManifest.xml arquivo, encontrei referências a RushOrm

Então, a primeira palavra-chave pesquisada foi db_name

Cool. Iniciei o Root Explorer no telefone procurando por argenta.db

Found. Então eu puxei para o meu laptop com o adb

# adb pull /data/data/com.sitael.vending/databases/argenta.db ./

e tentei abri-lo com um Navegador DB para SQLite

obviamente, foi protegido por senha

REVERSE-ENGINEERING

Passar para trás para os códigos-fonte, olhou para RushAndroidConfig.java

onde encontrei os métodos usados para configurar a base de dados.
A minha atenção foi capturada por this.encryptionKey = getDeviceId(context);

Mudei para a sua definição e…

>

Fundei que o aplicativo alvo usou o IMEI do telefone (*#06#)como chave de criptografia para a base de dados SQLite.

Abracadabra.

Boom baby.

Após alguns segundos de inspecção, Abri para UserWallets tabela

e editei o campo walletCredit mudanças de escrita

então empurrei a base de dados com o crédito bombeado de volta para o telefone

# adb pull ./argenta.db /data/data/com.sitael.vending/databases/argenta.db

VERDICT

Entretanto, Enquanto eu me sentia como “Robin Hood” (referência nostálgica e explícita ao código de fraude do Age Of Empires para +1000 ouro) eu desenvolvi um utilitário Android para rapidamente despejar/restaurar/violar a base de dados do aplicativo alvo na mosca.

Então voltei à minha Universidade novamente para finalmente testar o Hack

Dear diário…

CONCLUSÃO

De zero conta de crédito, eu poderia:

> Insuflar o crédito do aplicativo.
> Comprar coisas.
> Actualizar o crédito restante.
> Voltar ao estado de crédito zero.
> Inflar novamente o crédito.
> Começar de novo.

Com uma inspecção macro de todas as fontes invertidas encontrei uma enorme porção de código limpo – sem ofuscação – que não significou grandes contramedidas adoptadas para proteger os dados dos utilizadores e tornar a aplicação segura.

Um mês atrás…

A voz interior do White Hat de mim pegou no telefone e ligou para a empresa por detrás desta vergonha para reportar a vulnerabilidade. Eu gentilmente sugeri que eles jogassem fora a arquitetura atual e desenvolvessem uma melhor e segura do zero.

Falsa de Hocus.

Tags

Junte-se ao Hacker Noon

Crie sua conta gratuita para desbloquear sua experiência de leitura personalizada.

Similar Posts

Deixe uma resposta

O seu endereço de email não será publicado.