Güvenli iPhone uygulaması ↔ sunucu iletişimi


14

İOS uygulamam ile sunucu bileşeni arasında özel iletişim kurmak için en iyi yaklaşım nedir? Tek bir değişmeyen “gizli anahtarın” uygulama kaynağında yeterince pişirilmesi mi yoksa bu tür “el sıkışma” tuşlarının nesillerini dinamik olarak bir şekilde ayarlamam gerekiyor mu?

Sunucu kendi başına hassas verilere erişemez, bu yüzden kullanıcı bazı özel uç noktalara çarpsa bile, onları hiçbir yere götürmez, ancak bunların herkesten gizlenmesini istiyorum. Temel olarak, iOS uygulamamdan gelmedikleri sürece belirli rotalara isabet eden tüm istekleri göz ardı etmek istiyorum.

Eğer önemliyse, sunucu bileşeni RoR üzerinde çalışır.

Yanıtlar:


8

Her müşteriye ayrı ayrı iptal edebileceğiniz özel bir anahtar sağlamadığınız sürece bağlantıları etkili bir şekilde reddedemezsiniz. Ama bu muhtemelen aşırıya kaçmış. Çoğu kişi bir mermi ateşlemekle uğraşmazsa, kurşun geçirmez bir çözüme ihtiyacınız yoktur.

Bu bir güvenlik sorusu, bu yüzden bir tehdit modeli ve etki azaltma stratejileri tanımlayalım.

Size belirgin bir maliyet getirebilecek bir URL isabetiniz olduğunu varsayalım (örneğin işlem maliyeti) ve bunu hem basit bir DoS saldırısından hem de taklitçi uygulamalarından korumak istediğinizi varsayalım.

Bağlantının kolayca analiz edilmesini engellemek için SSL kullanın. İsteğin maliyetli kısmını yapmadan önce bağlantıyı biraz karmaşıklaştırmak için obviuos olmayan bir bağlantı noktası numarası, yönlendirme sırası, bir çerez değişimi kullanın. Sunucunun bağlantıyı kabul etmesi gerektiğini bildirmek için uygulamanızda pişmiş bazı gizli kodları kullanın.

Artık birisi, pahalı bir URL'yi basitçe bir paket dinleyicisi çalıştırarak veya kodunuzdaki URL benzeri dizelere bakarak öğrenemez. Potansiyel bir saldırgan uygulamanızı koda etmek zorundadır.

Kodunuzun gerçekten bir hata ayıklayıcı altında çözülmesini ve / veya çalıştırılmasını engelleyemezsiniz. Saldırgan sonunda gizli anahtarı ve bağlantı sırasını öğrenir.

Pahalı URL'nizde aldatma istekleri almaya başladığınızı fark edersiniz: bir saldırı biçiminde veya çalıştırmak için hizmetinize erişmesi gereken bir taklitçi uygulaması biçiminde veya belki bir istismar kodu herkese açık olarak gönderilir. Bununla birlikte, meşru bir talepten sahte bir istekte bulunamazsınız.

Farklı bir gizli anahtarla uygulamanız için ücretsiz bir küçük güncelleme oluşturun. Güvenliği ihlal edilmiş maliyetli URL ile aynı verileri sunan farklı bir maliyetli URL'ye çarpması gerekir. Bir süre için her iki URL'yi de erişilebilir yapın.

Kullanıcı tabanınızın güncellenmiş sürüme geçişini izleyin. Güvenliği ihlal edilmiş maliyetli URL'yi kısaltın ve 404 URL'sini düşürün. Umarım çok fazla kaybetmeden bir güvenlik ihlalini hafifletmişsinizdir. Silbaştan.

Feragatname: Ben bir güvenlik uzmanı değilim.


Kullanıcı uygulamaya sahipse, SSL üzerinden olsa bile (müşterinin sertifikalar üzerinde tam denetimi vardır) pahalı URL'yi keşfedebilir. Bu, tartışmanın geri kalanını, bunun gizlilik yoluyla güvenliğe karşı klasik bir örnek olduğunu belirtmemek için tartışmalıdır.
aleemb

@aleemb: Kesinlikle, maliyetli URL'yi tamamen gizli tutamazsınız. Kararlı bir saldırgan bunu keşfedecektir. Amaç, bu keşfi de maliyetli hale getirmektir, böylece bir "script kiddie" nin zor (er) zamana sahip olması ve böylece kazmak ve sömürmek ve hafifletmeyi mümkün kılmak için daha az teşviki olacaktır. Etki azaltma maliyetiniz makul derecede düşükse ve saldırganın keşif maliyeti, saldırganın pahalı URL'yi kullanmaktan elde edebileceği kazanca kıyasla yüksekse, saldırı anlamsız hale gelir. Bu yine katı bir güvenlik değildir .
9000

5

Gerçekten çözülemeyen klasik bir sorununuz var .

Basit gizlilik sağlamak için (yani verilerinizin aktarımda değiştirilemediğinden veya değiştirilemediğinden emin olmak için) SSL üzerinden her şeyi yapabilir ve sunucunuza iPhone'un tanıdığı bir CA tarafından düzgün bir sertifika verebilirsiniz.

Ancak, yetkilendirme için, uygulamanızdan başka hiç kimsenin API'ya erişemeyeceğini% 100 garanti edecek iyi bir çözüm yoktur. Sizin çözüm önerisi olur hariç çalışır:

  • uygulamanızı indiren herkesin özel anahtarına sahip olması gerekir
  • bir şekilde uygulamanızı paketinden çıkarmayı ve derlemesini kaldırmayı başarırlarsa, özel anahtar düz metin içinde olur
  • özel anahtarı düz metin olarak girdikten sonra, kendi kötü amaçlı isteklerini imzalamak için kullanabilirler.

Bunun hiçbir yolu yok. Bu yaklaşımı benimseyemeyeceğinizi söylemek değil, bunun kusursuz olmadığını anlayın. DRM'yi tamamen etkisiz hale getiren bu konu .


0

Bu nedir TLS ve SSL içindir. Her ikisi de sabit bir gizli anahtara gerek kalmadan güvenli bir bağlantı oluşturabilir. Bunu nasıl yaptıklarını öğrenmek için bağlantılı sayfadaki Açıklama bölümünü okuyun.

Çok fazla (herhangi bir) iş yapmak zorunda kalmadan TLS / SSL'den yararlanmanın etkili bir yolu, sunucunuzun istemcinin HTTPS protokolünü kullanarak eriştiği bir web hizmeti uygulamasına sahip olmaktır. HTTPS güvenli bir bağlantı üzerinden sadece HTTP'dir ve iOS'ta URL yükleme sistemi bunu sizin için uygular.


HTTPS iletişimi gizlice dinlemekten gizlerken, sunucu tarafından bir istemci sertifikası gerekmedikçe rasgele istemcilerin bir uç noktaya bağlanmasını engellemez. Bu uygulama 'içine pişmiş' olabilir ve ayıklamak için biraz bilgi gerektirebilir.
9000
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.