Menurut saya, pemasangan alat skimming itu seharusnya tidak terjadi jika kamera pengawas atm berjalan dengan baik. Dengan adanya alat skimming yang terpasang di atm, maka data konsumen yang tertanam dalam kartu pintar akan dengan mudahnya di salin ke dalam kartu kosong.
Kartu Pintar / Smart CardKartu berpita magnetis dan kartu pintar (smart card) memang ajaib. Selain ringkas dan ringan, kartu itu juga bekerja tanpa baterai. Bisa digunakan untuk menyimpan data, identifikasi, dan otentifikasi. Tak mudah patah, tahan terhadap kotoran dan air.
Sejak tahun 1992, kartu magnetis ini mulai menarik perhatian para hacker. Mereka berlomba-lomba memahami cara kerja kartu ini. Di berbagai forum bertebaran tulisan soal kartu magnetis dan smart card. Beberapa di antaranya fokus pada bagaimana memahami skema pembacaan kartu (read) dan bagaimana menyalin data kartu itu ke kartu lain (write).
Gambar skema cara membuat alat untuk membaca kartu pun bertebaran. Tak hanya kartu magnetis, kartu berteknologi cip yang teknologinya relatif baru juga sudah bisa dibuatkan skema pembuatan alat pembacanya. Mereka yang paham elektronika dengan mudah bisa mengikuti tutorial itu.
Para hacker sendiri mengakui bahwa kemudahan membaca dan menuliskan data kartu pintar itu memang menjijikkan. Untuk membaca sandi di dalam kartu itu atau untuk meng-encode, seorang hacker cukup menuliskan script program beberapa baris. Stephan King dalam artikelnya di berbagai forum di internet mengatakan, ”Kode script ini masih seadanya saja dan tak canggih, tetapi kode ini bekerja baik untuk decoding data dari kartu berpita magnetis” katanya.
Maka, kode yang dirilis Stephan King yang diberi nama arduino credit card decode itu pun beredar cepat dan menjadi referensi murah untuk hacker pemula yang ingin memahami kartu pintar. Ilmu King itu banyak dimanfaatkan para hacker belasan tahun untuk keperluan lain, misalnya bagaimana membuka pintu hotel yang menggunakan keamanan kartu pintar atau menyalin kartu akses ke gedung. Beberapa cracker jahat yang bermotif ekonomi bahkan memanfaatkannya untuk keperluan kriminal.
Kode arduino credit card decode tersebut saya tampilkan di akhir artikle ini (langsung di kutip dari situs pembuatnya — http://www.kingsdesign.com)
Kodenya tidak panjang, sehingga mudah untuk dimengerti. Jika datanya sudah terbaca, tinggal disalin ke dalam kartu kosong yang alatnya pun lagi2 mudah diperoleh di toko2, glodok atau mangdu misalnya dengan harga 1,5 juta tanpa peraturan yang ketat. Penyalinan ke dalam kartu kosong ini tidak memakan waktu yang lama, 3 detik saja untuk 1 kartu.
Lalu bagaimana dengan pin nya? Ada berbagai cara yang saya tau dari berbagai sumber untuk mendapatkan pin. Yang pertama adalah dengan mengintip langsung melalui bahu si korban. Cara ini memang tradisional tapi terkadang masih saja ada yang tidak sadar ketika ada orang yang mengintip pin nya.
Berikutnya adalah dengan pemasangan kamera. Kamera? Yap, kamu sering liat brosur2 yang ada di atm? Waspadalah karena terkadang di kotak brosurnya terpasang kamera tersembunyi. Di atas layar atm pun terkadang masih ditemui kamera tersembunyi.
Berikutnya adalah dengan pemasangan keyboard palsu. Idenya simpel tapi brilian ya? Penipu memasang keyboard palsu di atas keyboard asli (ditumpuk) dengan rapi sehingga korban tidak tau ketika dia menekan pin, keyboard palsu itu juga menyimpannya ke dalam suatu alat (flash disk biasanya) atau memancarkannya melalui perangkat wireless.
Yang terakhir yang saya ketaui dan paling ekstrim adalah dengan pemasangan atm palsu. Jadi atm nya adalah atm yang dibuat sendiri oleh penipu dengan desain yang mirip dengan aslinya. Kasus ini baru terjadi di luar negeri.
Klo udah dapet data dan pinnya, tinggal transaksi dimana aja deh. Gawat kan? Makanya klo kamu mau transaksi di atm, jangan lupa selalu ikuti tips berikut untuk mencegah kejadian pencurian data dan pin:
- selalu bertransaksi atm di tempat yang ramai atau di dalam bank karena biasanya penipu memasang alat skimming di atm2 yang sepi
- selalu tutupi dengan salah satu tangan ketika kamu memasukkan pin sehingga tidak akan bisa terlihat dari sudut manapun
- selalu berganti pin dalam periode tertentu untuk keamanan akun bank kamu
- coba untuk masukkan pin palsu di awal atau setelah transaksi untuk setidaknya ngibulin penipunya
- klo kartu kamu macet, pastiin kartu kamu di telan oleh atmnya dengan cara dorong paksa. Pokoknya jangan tinggalin kartu kamu klo belum di telen atmnya.
nb. pencantuman kode dimaksudkan agar pihak2 berwenang bisa mempelajari kodenya sehingga bisa dibuat pencegahnya
/* * Magnetic Stripe Reader * by Stephan King http://www.kingsdesign.com * * Reads a magnetic stripe. * */ int cld1Pin = 5; // Card status pin int rdtPin = 2; // Data pin int reading = 0; // Reading status volatile int buffer[400]; // Buffer for data volatile int i = 0; // Buffer counter volatile int bit = 0; // global bit char cardData[40]; // holds card info int charCount = 0; // counter for info int DEBUG = 0; void setup() { Serial.begin(9600); // The interrupts are key to reliable // reading of the clock and data feed attachInterrupt(0, changeBit, CHANGE); attachInterrupt(1, writeBit, FALLING); } void loop(){ // Active when card present while(digitalRead(cld1Pin) == LOW){ reading = 1; } // Active when read is complete // Reset the buffer if(reading == 1) { if (DEBUG == 1) { printBuffer(); } decode(); reading = 0; i = 0; int l; for (l = 0; l < 40; l = l + 1) { cardData[l] = '\n'; } charCount = 0; } } // Flips the global bit void changeBit(){ if (bit == 0) { bit = 1; } else { bit = 0; } } // Writes the bit to the buffer void writeBit(){ buffer[i] = bit; i++; } // prints the buffer void printBuffer(){ int j; for (j = 0; j < 200; j = j + 1) { Serial.println(buffer[j]); } } int getStartSentinal(){ int j; int queue[5]; int sentinal = 0; for (j = 0; j < 400; j = j + 1) { queue[4] = queue[3]; queue[3] = queue[2]; queue[2] = queue[1]; queue[1] = queue[0]; queue[0] = buffer[j]; if (DEBUG == 1) { Serial.print(queue[0]); Serial.print(queue[1]); Serial.print(queue[2]); Serial.print(queue[3]); Serial.println(queue[4]); } if (queue[0] == 0 & queue[1] == 1 & queue[2] == 0 & queue[3] == 1 & queue[4] == 1) { sentinal = j - 4; break; } } if (DEBUG == 1) { Serial.print("sentinal:" ); Serial.println(sentinal); Serial.println("" ); } return sentinal; } void decode() { int sentinal = getStartSentinal(); int j; int i = 0; int k = 0; int thisByte[5]; for (j = sentinal; j < 400 - sentinal; j = j + 1) { thisByte[i] = buffer[j]; i++; if (i % 5 == 0) { i = 0; if (thisByte[0] == 0 & thisByte[1] == 0 & thisByte[2] == 0 & thisByte[3] == 0 & thisByte[4] == 0) { break; } printMyByte(thisByte); } } Serial.print("Stripe_Data:" ); for (k = 0; k < charCount; k = k + 1) { Serial.print(cardData[k]); } Serial.println("" ); } void printMyByte(int thisByte[]) { int i; for (i = 0; i < 5; i = i + 1) { if (DEBUG == 1) { Serial.print(thisByte[i]); } } if (DEBUG == 1) { Serial.print("\t" ); Serial.print(decodeByte(thisByte)); Serial.println("" ); } cardData[charCount] = decodeByte(thisByte); charCount ++; } char decodeByte(int thisByte[]) { if (thisByte[0] == 0 & thisByte[1] == 0 & thisByte[2] == 0 & thisByte[3] == 0 & thisByte[4] == 1){ return '0'; } if (thisByte[0] == 1 & thisByte[1] == 0 & thisByte[2] == 0 & thisByte[3] == 0 & thisByte[4] == 0){ return '1'; } if (thisByte[0] == 0 & thisByte[1] == 1 & thisByte[2] == 0 & thisByte[3] == 0 & thisByte[4] == 0){ return '2'; } if (thisByte[0] == 1 & thisByte[1] == 1 & thisByte[2] == 0 & thisByte[3] == 0 & thisByte[4] == 1){ return '3'; } if (thisByte[0] == 0 & thisByte[1] == 0 & thisByte[2] == 1 & thisByte[3] == 0 & thisByte[4] == 0){ return '4'; } if (thisByte[0] == 1 & thisByte[1] == 0 & thisByte[2] == 1 & thisByte[3] == 0 & thisByte[4] == 1){ return '5'; } if (thisByte[0] == 0 & thisByte[1] == 1 & thisByte[2] == 1 & thisByte[3] == 0 & thisByte[4] == 1){ return '6'; } if (thisByte[0] == 1 & thisByte[1] == 1 & thisByte[2] == 1 & thisByte[3] == 0 & thisByte[4] == 0){ return '7'; } if (thisByte[0] == 0 & thisByte[1] == 0 & thisByte[2] == 0 & thisByte[3] == 1 & thisByte[4] == 0){ return '8'; } if (thisByte[0] == 1 & thisByte[1] == 0 & thisByte[2] == 0 & thisByte[3] == 1 & thisByte[4] == 1){ return '9'; } if (thisByte[0] == 0 & thisByte[1] == 1 & thisByte[2] == 0 & thisByte[3] == 1 & thisByte[4] == 1){ return ':'; } if (thisByte[0] == 1 & thisByte[1] == 1 & thisByte[2] == 0 & thisByte[3] == 1 & thisByte[4] == 0){ return ';'; } if (thisByte[0] == 0 & thisByte[1] == 0 & thisByte[2] == 1 & thisByte[3] == 1 & thisByte[4] == 1){ return '<'; } if (thisByte[0] == 1 & thisByte[1] == 0 & thisByte[2] == 1 & thisByte[3] == 1 & thisByte[4] == 0){ return '='; } if (thisByte[0] == 0 & thisByte[1] == 1 & thisByte[2] == 1 & thisByte[3] == 1 & thisByte[4] == 0){ return '>'; } if (thisByte[0] == 1 & thisByte[1] == 1 & thisByte[2] == 1 & thisByte[3] == 1 & thisByte[4] == 1){ return '?'; } }
{ 0 komentar... Views All / Send Comment! }
Posting Komentar
Kritik dan sarannya ya agan-agan semua sangat berguna untuk kemajuan blog ini ^_^