Kredi Kartı Güvenlik Kodu Kırmak Sadece 5 Saniye
PCI SSC (Payment Card Industry Security Standards Council) American Express, Discover Financial Services, JCB, MasterCard Worldwide ve Visa International tarafından, kredi kartı ödeme sistemleri üzerinde işlenen verilerin güvenliğinin sağlanması amacı ile kurulmuş bir konseydir. PCI SSC nin ana amacı, kredi kartı verilerini işleyen, yönlendiren yada depolayan bütün kuruluşları, konseyin yayınladığı PCI DSS (Payment Card Industry Security Standard) veri güvenliği standardına uygunluğunu denetlemektedir.
Örneğin E-ticaret ile iştigal eden bir tüccarsanız ve kredi kartı ile satış yapıyorsanız, E-ticaret sisteminiz PCI DSS veri güvenliği standartlarına uyumlu bir güvenlik altyapısına sahip olmalıdır. PCI DSS standartlarına uyumlu olup olmadığınız ise PCI SSC tarafından akredite edilmiş bağımsız denetim kuruluşları tarafından periyodik olarak denetlenir. Yanlış anlaşılmaması için yineliyorum PCI DSS standardı, kredi kartı verilerini işleyen, yönlendiren yada depolayan bütün kuruluşları ve iş modellerini kapsıyor, e-ticaret siteleri ile sınırlı değil.
PCI DSS birçok kriter ve yönergeden oluşuyor. Ancak benim odaklanmak istediğim bölüm kredi kartı verilerinin saklanma ve korunması ile ilgili olanlar. PCI DSS kredi kartını verilerin şifreli olarak tüccarın veritabanında saklanmasına müsade ediyor, ancak çoğu kartın arka yüzündeki (CVV/CVV2) güvenlik kodunun kalıcı olarak saklanmasına kesinlikle müsade etmiyor. (Amex ve bazı diğer markalarda bu güvenlik kodu ön yüzde buluyor)
Kredi kartlarının üzerindeki güvenlik kodu, 2000 li yılların başından beri tüketicilere dağıtılan tüm kredi kartlarında mevcut. Kredi kartlarının üzerindeki güvenlik kodunun hikayesi aslında 90 yılların sonlarına doğru büyük bir hızla artış gösteren kredi kartı suistimal(fraud) vakalarına dayanıyor.
O dönem yaşanan problemi anlamak için biraz kredi kartı anatomisinden bahsetmek sanırım doğru olur. Kredi kartı numaraları, ISO/IEC 7812 standardı kapsamında tanımlanmıştır. Bu standarda göre, kredi kartı numaralarının ilk hanesi kart markasını, sonraki 5 hanesi banka numarasını,(Bugün ilk 6 hane BIN numarası olarakta adlandırılmaktadır) takip eden 9 hane hesap numarası, ve en son hane ise Luhn sağlama(checksum) numarası olmak zorundadır. Tüm kredi kartı numaraları ISO/IEC 7812 standardında öngörüldüğü üzere Luhn formülasyonuna uygun bir şekilde yapılandırılır. Luhn formülü EMEI, ulusal kimlik numaraları gibi birçok farklı numara dizilerinde kullanılmaktadır.
Şimdi o döneme geri dönelim… Kredi Kartınız ile internet üzerinde işlem yaparken son kullanma tarihi ve kredi kartı numarası yeterli. Kredi kartı numaraları’nın da nasıl üretildiği herkes tarafından biliniyor. Hal böyleyken geçerli bir kredi kartından, son kullanma tarihi birbiriyle aynı olan başka geçerli kart üretmek son derece kolay olduğu gibi, numarasını bilinen bir kartının son kullanma tarihini deneyerek bulmakta oldukça kolaydı. Özellikle ilk jenerasyon POS cihazlarının ürettiği makbuzlarda kredi kartının 16 hanesinin açık olarak yazdığını ve bu kağıt parçalarını herkesin çöpe attığını düşünürsek, o dönemde geçerli kredi kartı numarası bulmanında ne kadar kolay olduğu hakkında sanırım bir kanı oluşmuştur. ( Bu arada malesef bazı bankalar hala sıralı / ardışık kredi kartı kart numaraları kullanıyor dolayısı ile Luhn sağlamasını koruyarak geriye gittiğinizde birçok geçerli kart üretmek mümkün.)
İşte kredi kartlarının hızla büyüyen e-ticaret işlem hacmi karşısındaki bu zaafiyetlerini yamamak için güvenlik kodu (CVV/CVV2) kart üreticileri tarafından bir çözüm olarak kabul edildi. Günümüzde kredi kartı güvenlik kodu, bankaya ait 3DES doğrulama anahtar çifti ile (CVK) kart numarası, son kullanma tarihi ve manyetik bant üzerindeki 3 haneli servis kodunu (ISO/IEC 7813) bir arada şifrelenmesi ile üretilen bir sayı dizisinin son 3 hanesi olarak kullanılıyor. Matemetiksel olarak, bu 3 haneli güvenlik kodu, kredi kartlarında güvenlik kodu kullanılmayan döneme oranla, geçerli bir kart üretme ihtimalini tam 1000 kat zayıflatıyor.
Şimdi kredi kartı güvenlik kodununun saklanmasına müsade etmeyen PCI DSS e geri dönelim. Yukarıda anlattıklarım doğrultusunda güvenlik kodunu, son kullanma tarihi bilenen bir kart için 1000 denemede (Amex için 10000) bulmak mümkün. Peki bu zor mudur? …Hayır. Peki kartın arkasındaki güvenlik kodunu kırmak ne kadar sürer? …en çok 5 saniye kadar.
Kısaca nasıl olduğunu anlatalım. Kredi kartı güvenlik kodu kırmak için kullanılan DBFN (Distributed Brute Force Network) ağları, prensip olarak, e-ticaret sitelerinin kredi kartı ödeme sayfalarındaki forma kredi kartı bilgilerini 0.1 USD lik ödeme tutarını ve güvenlik kodunu http isteği olarak post edip dönen yanıtı inceliyor. Yani bir kredi kartı DBF ağında dünyanın değişik noktalarında barındırılan 1000 adet e-ticaret sitesinin ödeme sayfası bulunuyorsa güvenlik kodunu kırmak 1 saniye sürüyor (CSC DBFA – Card Security Code Distributed Brute Force Attack , Deneme Yolu ile Kredi kartı güvenlik kodu kırma saldırısı ). Kırılan bu kredi kartları daha sonra tanesi ortalama 20USD ye karaborsada satışa çıkıyor. Satıştaki kartlar içinde birçok Türk Bankasına ait IBAN numaralarını görebilmek mümkün.
Geçen sene tespit ettiğimiz bir CSC DBF Saldırısı, bizim ağımızda barınan e-ticaret sitelerinin her birine hergün rastgele saatlerde ortalama 5 işlem gönderiyordu. Tespit ettiğimiz bu botnet, http isteklerini zombie (bot) ler aracılığı ile e-ticaret sitelerinin kredi kartı ödeme safyalarına gönderiyor, zombie ler de dönen yanıtı C&C (Command and Control – Kontrol Sunucusu) sunucusuna iletiyordu. Bu sayfalara istek gönderen IP ler üzerinde 1 haftalık istatistiki analiz yaptığımızda, 1247 farklı IP adresinin bu davranışı sergilediğini gördük, yani bu botnet en az 1247 zombie den oluşuyor.
Peki burada zafiyet nerelerde oluşuyor?. Zincirdeki ilk zayıf halka güvenlik konusunda yeterli tecrübeye sahip olmayan kimi e-ticaret sitesi işletmeci ve geliştiricileri. Aslında böyle bir tehtid modelini bilmelerini ve tespit etmelerini beklemek son derece yanlış olur çünkü yoğun işlem hacmi bulunan e-ticaret sitelerinde, onlarca başarısız kredi kartı işlem logu olması son derece doğal. Bu tip bir saldırıyı eldeki kayıtlar üzerinde veri madenciliği yapmadan saptamak neredeyse mümkün değil. Ancak e-ticaret siteleri, kredi kartı ödeme formlarına basit bir captcha ekleyerek CSC DBFN lerin deneme tahtası olmaktan kendilerini kurtarabilirler.
Diğer zayıf halka ise bankalar. Banka tarafındaki sıkıntıyı aslında ikiye ayırmak gerek. İlk problem, bir çok bankada gerçek zamanlı işlem analizi yapabilen akıllı bir fraud tespit katmanı bulunmaması. Genelde eldeki Kredi kartı işlem kayıtları belirli periyodlarda batch olarak kural motoruna besleniyor. Buradaki kurallara isabet eden işlemler ayıklanarak inceleniyor. İkinci problem ise tam bu noktada oluşuyor yani bankaların kredi kartı fraud tespitindeki yaklaşımında. Genel Fraud yaklaşımı gerçekleşmiş işlemler üzerinden gidiyor. Yani Ortalamanın üzerinde bir harcama yaptıysanız yada birbirine uzak coğrafi bölgelerde çok kısa aralıklarla işlem yaptıysanız bunlar süpheli kredi kartı işlem olarak addedilir. Örneklediğim senaryolarla sınırlı olmamakla beraber, genel kredi kartı fraud yaklaşımı görüldüğü üzere “eğer” bir harcama gerçekleşmişse ilkesini esas alıyor. Yani gerçekleşmeyen kredi kartı işlemleri Fraud analizlerinin dışında kalıyor. Gerçekleşmemiş işlemleri fraud olarak nitelendirmek her ne kadar fraud’un tanımına aykırı olasada, CSC DBFA (Card Scurity Code Distributed Brute Force Attack) senaryosunda gerçekleşmeyen yani red edilen kredi kartı işlemleri neticesinde müstakbel bir fraud vakası oluştuğu için, fraud olarak nitelendirmek yanlış olmayacaktır.
CSC DBF Saldırıları ise bankalaların yaklaşımına tam zıt bir yaklaşıma sahip. En kötü ihtimalle 1000, en iyi ihtimalle 1 adet geçersiz işlem üreterek kredi kartının güvenlik kodunu kırabiliyor. Genel ihtimal hesabı yapacak olursak;
İlk 2 denemenin hatalı olma ihtimali
(1-(1/1000))*(1-(1/999))=99.8%
İlk 3 denemenin hatalı olma ihtimali
(1-(1/1000))*(1-(1/999))*(1-(1/998))=99.7%
İlk 4 denemenin hatalı olma ihtimali
(1-(1/1000))*(1-(1/999))*(1-(1/998))*(1-(1/997))=99.6%
Yani 500. denemeden sonra denenen her güvenlik kodu %50 den büyük bir ihtimalle isabetli olacaktır. Bu yaklaşım normal bir dağılım sergileyeceğinden, aslında ortalama olarak ilk 500 denemede kredi kartlarının 50% sinin güvenlik kodunun kırılabileceğini hesaplamak pek zor değil.
OTP Ekranlı Kredi Kartı
Bu güne kadar ödeme sistemleri konusunda yazılıp çizilen bir çok standart ve protokol güvenlik açıkları içeriyor yada yetersiz. Geçen sene EMV protokolü üzerinde Reply Attack ile Offline PIN Verification Bypass ispatını yapan bir makale yayınlanmıştı. Hatta makaleyi yazanlar ispat için bir prototip cihazda geliştirdiler. Kredi Kartı güvenlik kodununda tek başına yeterli olmadığını, dolayısı ile üye işyerleri tarafında uygulanan PCI DSS denetimlerininde kısıtlı bir güvenlik sağladığını görüyoruz.
Bunu bugün buraya yazıyorum: en geç 5 sene içinde bütün kredi kartlarının üzerinde OTP (One Time Passcode) ekranı olacak. VISA 3-4 yıldır bu teknoloji üzerinde çalışıyor, hatta Emue nin bir kısmını satın aldı. Ancak VISA nın gözden kaçırdığı, güvenliğini yine kapalı devre bir sistem üzerine inşaa ediyor olması. Symantec ise, MasterCard tarafından onaylanan OATH (open authentication) OTP li kredi kartlarını InCard ve G&D ile gibi üreticilerle işbirliği içinde açık bir kimlik denetimi yapısı olan VIP üzerine oturtuyor. Yakın bir gelecekte 3D Secure un yerini alacak olan bu teknoloji ödeme sistemleri endüstrisinin tek çıkış yolu gibi görünüyor.
Örneğin E-ticaret ile iştigal eden bir tüccarsanız ve kredi kartı ile satış yapıyorsanız, E-ticaret sisteminiz PCI DSS veri güvenliği standartlarına uyumlu bir güvenlik altyapısına sahip olmalıdır. PCI DSS standartlarına uyumlu olup olmadığınız ise PCI SSC tarafından akredite edilmiş bağımsız denetim kuruluşları tarafından periyodik olarak denetlenir. Yanlış anlaşılmaması için yineliyorum PCI DSS standardı, kredi kartı verilerini işleyen, yönlendiren yada depolayan bütün kuruluşları ve iş modellerini kapsıyor, e-ticaret siteleri ile sınırlı değil.
PCI DSS birçok kriter ve yönergeden oluşuyor. Ancak benim odaklanmak istediğim bölüm kredi kartı verilerinin saklanma ve korunması ile ilgili olanlar. PCI DSS kredi kartını verilerin şifreli olarak tüccarın veritabanında saklanmasına müsade ediyor, ancak çoğu kartın arka yüzündeki (CVV/CVV2) güvenlik kodunun kalıcı olarak saklanmasına kesinlikle müsade etmiyor. (Amex ve bazı diğer markalarda bu güvenlik kodu ön yüzde buluyor)
Kredi kartlarının üzerindeki güvenlik kodu, 2000 li yılların başından beri tüketicilere dağıtılan tüm kredi kartlarında mevcut. Kredi kartlarının üzerindeki güvenlik kodunun hikayesi aslında 90 yılların sonlarına doğru büyük bir hızla artış gösteren kredi kartı suistimal(fraud) vakalarına dayanıyor.
O dönem yaşanan problemi anlamak için biraz kredi kartı anatomisinden bahsetmek sanırım doğru olur. Kredi kartı numaraları, ISO/IEC 7812 standardı kapsamında tanımlanmıştır. Bu standarda göre, kredi kartı numaralarının ilk hanesi kart markasını, sonraki 5 hanesi banka numarasını,(Bugün ilk 6 hane BIN numarası olarakta adlandırılmaktadır) takip eden 9 hane hesap numarası, ve en son hane ise Luhn sağlama(checksum) numarası olmak zorundadır. Tüm kredi kartı numaraları ISO/IEC 7812 standardında öngörüldüğü üzere Luhn formülasyonuna uygun bir şekilde yapılandırılır. Luhn formülü EMEI, ulusal kimlik numaraları gibi birçok farklı numara dizilerinde kullanılmaktadır.
Şimdi o döneme geri dönelim… Kredi Kartınız ile internet üzerinde işlem yaparken son kullanma tarihi ve kredi kartı numarası yeterli. Kredi kartı numaraları’nın da nasıl üretildiği herkes tarafından biliniyor. Hal böyleyken geçerli bir kredi kartından, son kullanma tarihi birbiriyle aynı olan başka geçerli kart üretmek son derece kolay olduğu gibi, numarasını bilinen bir kartının son kullanma tarihini deneyerek bulmakta oldukça kolaydı. Özellikle ilk jenerasyon POS cihazlarının ürettiği makbuzlarda kredi kartının 16 hanesinin açık olarak yazdığını ve bu kağıt parçalarını herkesin çöpe attığını düşünürsek, o dönemde geçerli kredi kartı numarası bulmanında ne kadar kolay olduğu hakkında sanırım bir kanı oluşmuştur. ( Bu arada malesef bazı bankalar hala sıralı / ardışık kredi kartı kart numaraları kullanıyor dolayısı ile Luhn sağlamasını koruyarak geriye gittiğinizde birçok geçerli kart üretmek mümkün.)
İşte kredi kartlarının hızla büyüyen e-ticaret işlem hacmi karşısındaki bu zaafiyetlerini yamamak için güvenlik kodu (CVV/CVV2) kart üreticileri tarafından bir çözüm olarak kabul edildi. Günümüzde kredi kartı güvenlik kodu, bankaya ait 3DES doğrulama anahtar çifti ile (CVK) kart numarası, son kullanma tarihi ve manyetik bant üzerindeki 3 haneli servis kodunu (ISO/IEC 7813) bir arada şifrelenmesi ile üretilen bir sayı dizisinin son 3 hanesi olarak kullanılıyor. Matemetiksel olarak, bu 3 haneli güvenlik kodu, kredi kartlarında güvenlik kodu kullanılmayan döneme oranla, geçerli bir kart üretme ihtimalini tam 1000 kat zayıflatıyor.
Şimdi kredi kartı güvenlik kodununun saklanmasına müsade etmeyen PCI DSS e geri dönelim. Yukarıda anlattıklarım doğrultusunda güvenlik kodunu, son kullanma tarihi bilenen bir kart için 1000 denemede (Amex için 10000) bulmak mümkün. Peki bu zor mudur? …Hayır. Peki kartın arkasındaki güvenlik kodunu kırmak ne kadar sürer? …en çok 5 saniye kadar.
Kısaca nasıl olduğunu anlatalım. Kredi kartı güvenlik kodu kırmak için kullanılan DBFN (Distributed Brute Force Network) ağları, prensip olarak, e-ticaret sitelerinin kredi kartı ödeme sayfalarındaki forma kredi kartı bilgilerini 0.1 USD lik ödeme tutarını ve güvenlik kodunu http isteği olarak post edip dönen yanıtı inceliyor. Yani bir kredi kartı DBF ağında dünyanın değişik noktalarında barındırılan 1000 adet e-ticaret sitesinin ödeme sayfası bulunuyorsa güvenlik kodunu kırmak 1 saniye sürüyor (CSC DBFA – Card Security Code Distributed Brute Force Attack , Deneme Yolu ile Kredi kartı güvenlik kodu kırma saldırısı ). Kırılan bu kredi kartları daha sonra tanesi ortalama 20USD ye karaborsada satışa çıkıyor. Satıştaki kartlar içinde birçok Türk Bankasına ait IBAN numaralarını görebilmek mümkün.
Geçen sene tespit ettiğimiz bir CSC DBF Saldırısı, bizim ağımızda barınan e-ticaret sitelerinin her birine hergün rastgele saatlerde ortalama 5 işlem gönderiyordu. Tespit ettiğimiz bu botnet, http isteklerini zombie (bot) ler aracılığı ile e-ticaret sitelerinin kredi kartı ödeme safyalarına gönderiyor, zombie ler de dönen yanıtı C&C (Command and Control – Kontrol Sunucusu) sunucusuna iletiyordu. Bu sayfalara istek gönderen IP ler üzerinde 1 haftalık istatistiki analiz yaptığımızda, 1247 farklı IP adresinin bu davranışı sergilediğini gördük, yani bu botnet en az 1247 zombie den oluşuyor.
Peki burada zafiyet nerelerde oluşuyor?. Zincirdeki ilk zayıf halka güvenlik konusunda yeterli tecrübeye sahip olmayan kimi e-ticaret sitesi işletmeci ve geliştiricileri. Aslında böyle bir tehtid modelini bilmelerini ve tespit etmelerini beklemek son derece yanlış olur çünkü yoğun işlem hacmi bulunan e-ticaret sitelerinde, onlarca başarısız kredi kartı işlem logu olması son derece doğal. Bu tip bir saldırıyı eldeki kayıtlar üzerinde veri madenciliği yapmadan saptamak neredeyse mümkün değil. Ancak e-ticaret siteleri, kredi kartı ödeme formlarına basit bir captcha ekleyerek CSC DBFN lerin deneme tahtası olmaktan kendilerini kurtarabilirler.
Diğer zayıf halka ise bankalar. Banka tarafındaki sıkıntıyı aslında ikiye ayırmak gerek. İlk problem, bir çok bankada gerçek zamanlı işlem analizi yapabilen akıllı bir fraud tespit katmanı bulunmaması. Genelde eldeki Kredi kartı işlem kayıtları belirli periyodlarda batch olarak kural motoruna besleniyor. Buradaki kurallara isabet eden işlemler ayıklanarak inceleniyor. İkinci problem ise tam bu noktada oluşuyor yani bankaların kredi kartı fraud tespitindeki yaklaşımında. Genel Fraud yaklaşımı gerçekleşmiş işlemler üzerinden gidiyor. Yani Ortalamanın üzerinde bir harcama yaptıysanız yada birbirine uzak coğrafi bölgelerde çok kısa aralıklarla işlem yaptıysanız bunlar süpheli kredi kartı işlem olarak addedilir. Örneklediğim senaryolarla sınırlı olmamakla beraber, genel kredi kartı fraud yaklaşımı görüldüğü üzere “eğer” bir harcama gerçekleşmişse ilkesini esas alıyor. Yani gerçekleşmeyen kredi kartı işlemleri Fraud analizlerinin dışında kalıyor. Gerçekleşmemiş işlemleri fraud olarak nitelendirmek her ne kadar fraud’un tanımına aykırı olasada, CSC DBFA (Card Scurity Code Distributed Brute Force Attack) senaryosunda gerçekleşmeyen yani red edilen kredi kartı işlemleri neticesinde müstakbel bir fraud vakası oluştuğu için, fraud olarak nitelendirmek yanlış olmayacaktır.
CSC DBF Saldırıları ise bankalaların yaklaşımına tam zıt bir yaklaşıma sahip. En kötü ihtimalle 1000, en iyi ihtimalle 1 adet geçersiz işlem üreterek kredi kartının güvenlik kodunu kırabiliyor. Genel ihtimal hesabı yapacak olursak;
İlk 2 denemenin hatalı olma ihtimali
(1-(1/1000))*(1-(1/999))=99.8%
İlk 3 denemenin hatalı olma ihtimali
(1-(1/1000))*(1-(1/999))*(1-(1/998))=99.7%
İlk 4 denemenin hatalı olma ihtimali
(1-(1/1000))*(1-(1/999))*(1-(1/998))*(1-(1/997))=99.6%
Yani 500. denemeden sonra denenen her güvenlik kodu %50 den büyük bir ihtimalle isabetli olacaktır. Bu yaklaşım normal bir dağılım sergileyeceğinden, aslında ortalama olarak ilk 500 denemede kredi kartlarının 50% sinin güvenlik kodunun kırılabileceğini hesaplamak pek zor değil.
OTP Ekranlı Kredi Kartı
Bu güne kadar ödeme sistemleri konusunda yazılıp çizilen bir çok standart ve protokol güvenlik açıkları içeriyor yada yetersiz. Geçen sene EMV protokolü üzerinde Reply Attack ile Offline PIN Verification Bypass ispatını yapan bir makale yayınlanmıştı. Hatta makaleyi yazanlar ispat için bir prototip cihazda geliştirdiler. Kredi Kartı güvenlik kodununda tek başına yeterli olmadığını, dolayısı ile üye işyerleri tarafında uygulanan PCI DSS denetimlerininde kısıtlı bir güvenlik sağladığını görüyoruz.
Bunu bugün buraya yazıyorum: en geç 5 sene içinde bütün kredi kartlarının üzerinde OTP (One Time Passcode) ekranı olacak. VISA 3-4 yıldır bu teknoloji üzerinde çalışıyor, hatta Emue nin bir kısmını satın aldı. Ancak VISA nın gözden kaçırdığı, güvenliğini yine kapalı devre bir sistem üzerine inşaa ediyor olması. Symantec ise, MasterCard tarafından onaylanan OATH (open authentication) OTP li kredi kartlarını InCard ve G&D ile gibi üreticilerle işbirliği içinde açık bir kimlik denetimi yapısı olan VIP üzerine oturtuyor. Yakın bir gelecekte 3D Secure un yerini alacak olan bu teknoloji ödeme sistemleri endüstrisinin tek çıkış yolu gibi görünüyor.
Yorumlar