Twitter'ın kısa mesajda iki faktörlü kimlik doğrulamayı devre dışı bırakmasıyla , SMS dolandırıcılığının nasıl çalıştığına ve uygulama geliştiricilerin buna karşı nasıl korunabileceğine derinlemesine bakmanın eğlenceli olacağını düşündüm.
Sapkın teşviklerin, dar görüşlü düzenlemelerin ve teknik ustalığın büyüleyici bir hikayesi.
Hadi kazalım! 👇
Başlangıç olarak Twitter'ın son duyurusunu özetleyelim:
Basitçe söylemek gerekirse bu, yalnızca Twitter'ın ücretli sürümünü kullanan kullanıcıların, giriş sırasında telefonlarına bir kod gönderileceği anlamına gelir.
SMS dolandırıcılığını anlamanın anahtarı bazı numaraların premium olduğunu anlamaktır. Bu numarayı aramak veya SMS göndermek istiyorsanız, bu size bir miktar paraya (genellikle onlarca sente) mal olur ve numaranın sahibi bu onlarca sentin bir kısmını kendisi için alır.
Bu telefon numaralarının sahipleri genellikle tele-oylama, flört ve teknik destek gibi kullanıcılarına değer sağlamak ve sunmak için para gerektiren meşru hizmetler sunar.
Ancak bu rakamlar kolay kazanç elde etmek için oynanabilir 🤑
Kötü bir oyuncu, hadi ona Bob diyelim, birçok premium telefon numarasına[1] sahip olur. Bob bir bilgisayar korsanı olabilir ya da kötüye giden bir cep telefonu şebeke operatörü olabilir.
Bob, premium telefon numaralarına kısa mesaj gönderecek bir web hizmeti bulur. Bu mesajlar, iki faktörlü kimlik doğrulama kodları, tek kullanımlık şifreler veya hizmetin bir parçası olarak kullanıcıya gönderilen herhangi bir kısa mesaj olabilir (örn. partiful.com, SMS aracılığıyla etkinlik hatırlatıcıları gönderir).
Bob, hizmetin premium telefon numaralarına binlerce SMS göndermesini sağlamanın bir yolunu bulur. Bu çok kolay olabilir. Ön uç hizmetinin manipüle edilmesi kolay olabilir ve arka uç uç noktaları korumasız olabilir ve tersine mühendislik yapılması kolay olabilir.
Daha da kötüsü, birçok hizmet SMS göndermek için standartlaştırılmış bir uç nokta kullanıyor. Bu, Bob'un saldıracak siteleri bulmasını büyük ölçüde kolaylaştırır. Örneğin, hizmet kullanıcıların kimliğini doğrulamak ve Auth0 gibi 2FA veya OTP kodları göndermek için bir üçüncü taraf kullanıyorsa, o zaman SMS göndermenin uç noktası çoğunlukla bilinir: Bob'un tek yapması gereken Auth0'ları keşfetmenin bir yolunu bulmaktır. Bir web hizmetinin kimliği (web hizmetinin ön ucu bu kimliği içeren bir istekte bulunduğu için oldukça kolaydır) ve ardından bu üçüncü taraf hizmetini kullanan tüm sitelere saldırabilirler.
Son olarak Bob, hizmetin premium telefon numaralarına binlerce SMS göndermesini sağlar. Web hizmeti 💵💵💵 kaybeder ve Bob kâr eder.
SMS dolandırıcılığını önleyecek sihirli bir çözüm yok. Ancak işte işe yarayabilecek birkaç fikir:
Kullanıcıların kimliğini doğrulamak için Auth0 gibi bir üçüncü taraf hizmeti kullanıyorsanız, SMS göndermek için kullanılan uç noktayı gizleyebilirsiniz. Bu, bir saldırıyı doğrudan engellemese de, bir saldırının mümkün olduğunu keşfetmeyi çok daha zorlaştırır.
Bir bisiklet hırsızının bisiklet çalması en kolay olanı hedeflemesi gibi, iyi bir bilgisayar korsanı da hacklenmesi daha kolay olan web hizmetlerine yönelir. Benim önsezim, bu yaklaşımın uygulamaların uzun kuyruğu için yeterince işe yarayacağı yönünde.
Bulut sağlayıcılarından, sahte İSS'lerden kaynaklanan veya başka şekilde yarım yamalak olan IP'lerden gelen tüm istekleri engelleyin. Bunun uygulanması oldukça basit olmalı - bir IP adresinin kalitesini derecelendirmenize olanak tanıyan birçok hizmet mevcuttur - ve muhtemelen çok etkili olacaktır.
Bob'un saldırısını engellemek için SMS gönderen uç noktaya IP tabanlı hız sınırlama ekleyin. Doğru şekilde kurulursa bu durum meşru kullanıcıları etkilemez. Ancak bu yalnızca basit bir saldırıya karşı işe yarar. Bob, saldırısını çeşitli IP adreslerinden istek gönderecek şekilde tasarlarsa ( dağıtılmış bir saldırı) bu işe yaramaz.
Belirli bir telefon numarasına, belirli bir süre boyunca o telefon numarasını engellemeden önce yalnızca az sayıda SMS gönderin. Bunu ön uçta yapabiliriz, ancak Bob kararlıysa bunun yerine saldıracak arka uç noktasını bulabilir. Telefon numarasını arka uçta engellemek daha zordur: telefon numaralarının ve son oturum açma girişimlerinin kaydını tutmayı gerektirir[2].
Kullanıcıyı SMS göndermeden önce CAPTCHA çözmeye zorlayın. Bu yaklaşım, saldırganların engellenmesinde iyi işe yarasa da (CAPTCHA'nın çözülmesinin geniş ölçekte yapılması zor ve pahalıdır), kullanıcının hizmet deneyimini olumsuz etkiler.
Libphonenumber kullanarak özel tarifeli telefon numaralarını tanımlayın ve engelleyin. Bu umut verici görünse de verilerin ne kadar güvenilir olduğunu ve bu yaklaşımın ne kadar etkili olduğunu bilmiyorum.
Yalnızca ücretli hesaplara kısa mesaj gönderin. Twitter'ın benimsediği yaklaşım budur. Bu kötü bir seçenek değil ama yukarıdaki listeden de görebileceğiniz gibi uygulayabileceğiniz birçok başka yaklaşım var.
Çok sayıda dolandırıcı kullanıcıya sahip cep telefonu ağ operatörlerini engelleyin. Bu, açıkça kötü ağ operatörlerini engelleyecektir, ancak ağda çok sayıda meşru kullanıcı varsa iyi çalışmaz.
Bunun yerine mesaj göndermek için WhatsApp'ı kullanın. WhatsApp, SMS'in aksine ücretsizdir ancak dünya çapındaki tüm kullanıcılar WhatsApp'ı kullanmamaktadır[3].
İyi bir çözüm, saldırganlar daha kolay hedeflere ilerleyene kadar zaman yatırımı ve etkinliğe öncelik vererek yukarıdaki yaklaşımlardan yeterince faydalanacaktır.
Yukarıdaki önlemlerin uygulanmasında bazı kişisel deneyimlerim var ve ekibimin bu olumsuz etkileri nasıl ele aldığına dair paylaşacak bir veya iki hikayem var. Ama bu başka bir zamanın hikayesi… 👨💻
Bu beni son noktaya getiriyor:
Baskın bir SMS API'si olan IMO, Twilio, standart API'lerine (ücretsiz mi? 🙏) bir eklenti olarak SMS sahtekarlığına karşı koruma sunma konusunda büyük bir fırsata sahip.
Twilio'nun tüm hesaplarında sahte telefon numaraları ve operatörlerle ilgili veriler bulunduğundan, Twilio, hatalı numaraları ve operatörleri birden fazla web hizmeti için büyük bir sorun haline gelmeden hızlı bir şekilde engelleyebilecek benzersiz bir konumdadır.
Twilio, yeni nesil kimlik doğrulama mekanizması olan Silent Network Auth'u kullanarak geçersiz telefon numaralarını doğrudan tespit edebiliyor ve bu yardımcı programın kullanıcılar arasında paylaşılması gerektiğini düşünüyor.
İnsanların kullandığı diğer düşünceleri, fikirleri ve yaklaşımları duymayı çok isterim - lütfen aşağıya bir yorum yazarak paylaşın, böylece hepimiz öğrenebiliriz.
Şimdilik bu kadar; bu uç noktaları koruyun ve harika bir hafta geçirin!
HackerNews'te mükemmel bir tartışma var.
[1] Bu premium telefon numaralarının çalışmasına bile gerek olmadığını unutmayın: Çalışan bir SIM karta bağlı olmaları ve bir telefona kayıtlı olmaları gerekmez. Yönlendirilebildikleri sürece bu saldırıda kullanılabilirler.
[2] Bunu verimli hale getirecek ve geniş ölçekte çalışacak iyi bir veri yapısı ve algoritma olup olmadığını merak ediyorum. Eğer bildiğiniz biri varsa lütfen paylaşın!
[3] Önerileri için HN'deki @csharpminor'a teşekkür ederiz.
Ben Apu , Koodos'un CTO'su ve bir mühendisim.
Bu yazı ilk olarak kişisel blogumda göründü - bunun gibi daha fazlası için abone olun!