Uygulama ve IoT cihazı arasındaki iletişimi nasıl güvenli hale getirebilirim?


18

Şu anda bir mobil uygulama (şu anda İyonik platformu kullanıyor) ve gömülü bir cihaz arasındaki Bluetooth iletişimini içeren bir proje üzerinde çalışıyorum. Karşılaştırma için, ürünümüz akıllı bir kilide benzer .

Güvenlik son derece endişe vericidir ve donanımımızın ve yazılımımızın korsan olmamasını sağlamanın yollarını arıyoruz. Sistemimizin güvenli olduğundan emin olmak için hangi adımları atmalıyız?

Düzenleme: Evet, şu anda iletişimleri şifreliyoruz ve cihaz sunucumuzla iletişim kurduğunda HTTPS kullanıyoruz.


HTTPS kullanılsın mı? Her iki cihazı da kodluyor musunuz? Şifreleme?
Mawg, Monica'nın


2
@Mawg Bildiğim kadarıyla HTTPS bluetooth için geçerli değildir (veya en azından normatif / aklı başında değil).
goldilocks

1
Bu soruyu konu dışı olarak kapatmak için oy kullanıyorum çünkü bunun IoT'ye nasıl özgü olduğunu gösteremedi. Sadece cihazlar arasındaki iletişimi güvence altına alıyor.
Helmar

4
@Helmar Cihazlar arasındaki iletişim, IoT'nin oldukça önemli bir özelliği, hatta tanımlayıcı bir özelliktir, bu yüzden bu sorunun neden konu dışı olacağını göremiyorum.
Gilles 'SO- kötü olmayı bırak'

Yanıtlar:


13

Cihazınızın yeterince güvenli olduğundan emin olmak için birkaç ipucum var:

  1. Bluetooth iletişimine biraz şifreleme ekleyin. Şifreleme anahtarlarını havadan uzak tutmanızı öneririm. Örneğin, kullanıcıdan mobil uygulamanın ilk kurulumunda cihazda, kutuda yazılı vb. Bir QR kodunu taramasını isteyebilirsiniz, belki AES anahtarıyla? Sana bağlı. Bu, birisinin kablosuz olarak iletilen şifreyi düz metinle görmesini önlemek içindir.
  2. Mümkünse, seçtiğiniz şifreleme algoritmasının ECB (CBC kullanın) modundan uzak durun, çünkü iletilen veriler hakkında bilgi verebilir. Bununla ilgili daha fazla bilgiyi burada bulabilirsiniz .
  3. Bluetooth veri iletiminde, mesajın tekrarlanmaması için benzersiz bir kimlik eklediğinizden emin olun (örneğin, bir zaman damgası ekleyebilirsiniz). Ayrıca TOTP benzeri bir sistem de uygulayabilirsiniz.
  4. Aygıtın üzerine kolayca yanıp sönmesine izin veren bir bağlantı noktası koyun, böylece yazılımın bir hata olduğunu fark etmeniz durumunda (ve bir nedenden dolayı OTA'yı güncelleyemezsiniz), cihaz pahalı bir kağıt ağırlığı değil, sadece bir cihazdır. bir PC'ye takılması ve yeni bir yazılıma dönüştürülmesi gerekir.
  5. Ekstra: Rogue root sertifikası olan (muhtemelen kendi kendine verilen ve istemci aygıtta yüklü olan) bir kişinin sunucu iletişiminizi engelleyemediğinden emin olmak için HTTPS sertifikasını doğrulayın. İşte Android için soran bir SO, iOS için de benzer kaynakları bulabilmelisiniz .

Ayrıca, cihazınızı korumak için kullanacağınız şifreleme ve şifreleme hakkında daha fazla bilgi edinmek istiyorsanız, bu (ücretsiz) e-kitabı kontrol edin . Şifreleme algoritmalarının iyi ve kötü uygulamaları hakkında çok konuşur ve ürününüzü güvence altına almanıza yardımcı olur. (Not 1: Lütfen, lütfen kendi algoritmanızı oluşturmayın. Not 2: crypto101 veya lvh ile ilişkili değilim.)


2
“Yapabiliyorsanız, ECB'den uzak durun”. Hayır, kötü tavsiye. Pasif tavsiye “asla ECB kullanmayın” ama yine de eksik. Daha iyi bir cevap , kodunuza CBC harflerini yazıyorsanız, yanlış yaptığınızı söyler . Özellikle AES-CBC iletişimin bütünlüğünü veya gerçekliğini garanti etmez.
Gilles 'SO- kötü olmayı bırak'

@Gilles ECB, bugünlerde sadece düz metin olarak veya sadece belirli bir değere sahip xor ileten tüm iot cihazlarından kesinlikle daha iyi, ancak evet, ECB, ürününüzü neredeyse "hacklenemez" durumuna getirmiyor (teknik olarak hiçbir şey yapmıyor, ancak şu anda mümkün olan en uzun süre güvenli tutacak bir şey yapmaya çalışabilirsiniz ve bu ECB'yi içermez, ancak AES-CBC 256'nın doğru bir şekilde uygulanmasını içerir).
Ave

13

Uçtan uca TCP'niz varsa, uçtan uca TLS kullanın (örn. HTTPS ile).

Özellikle kriptografi söz konusu olduğunda tekerleği yeniden icat etmeyin - çoğu insan yanlış anlar. Cihaz TLS'yi destekleyemeyecek kadar kaynak kısıtlaması olmadığı sürece, AES seviyesine inerseniz, yanlış yapıyorsunuz demektir . 1 numaralı hata şifrelemek ve kimlik doğrulamayı unutmaktır - sunucunuz ve cihazınız arasında şifreli bir kanal yerine sunucunuz ve ortadaki bir adam arasında şifreli bir kanalınız varsa, şifreleme herhangi bir fayda sağlamaz . TLS'yi kullanamıyorsanız, hangi protokolü kullanırsanız kullanın, her şeyin kimliğini doğruladığından ve gizli olması gerekenleri şifrelediğinden emin olun.

TLS'yi güvenli bir şekilde kullanmak için, her bir katılımcının bakış açısından hangi garantilere ihtiyacınız olduğunu düşünün. Genellikle cihazın yasal sunucu ile konuştuğunu bilmesi gerekir. Bu, sunucunun sertifikasını kontrol etmesi gerektiği anlamına gelir. Cihaz güvenilir olarak kaydedilmiş bir sertifika yetkilisinin X.509 sertifikasına sahip olmalıdır; bu, bir saldırgan tarafından değiştirilemeyen bir depolama alanı gerektirir, ancak depolama alanının gizliliğini gerektirmez. Sunucunun sertifikasını doğrudan kodlamamalısınız, çünkü bu, güvenliği ihlal edilmişse sertifikayı kolayca değiştirmenize izin vermez. Bunun yerine, cihaz beklenen kimliği depolarsunucunun (ana bilgisayar adı) ve belirli bir ortak anahtarın beklenen ana bilgisayar adına ait olduğunu garanti eden bir sertifika yetkilisinin sertifikası. Bir kez daha, tekerleği yeniden icat etmeyin, TLS kütüphaneniz veya uygulamanız tarafından sağlanan sertifika kontrolüne güvenin.

Sunucunun meşru bir istemciyle konuştuğunu bilmesi gerekiyorsa, her istemcinin kendi istemci sertifikasına sahip olması gerekir. Bu, istemcide gizli depolama gerektirir. İstemci sertifikasını TLS kitaplığınızdan TLS oturum açma işlevine aktarın veya uygulama yapılandırmasında ayarlayın.

Bu, sunucunuz ve cihazınız arasındaki iletişimin güvenliğini sağlar. Mobil uygulama cihazla doğrudan konuşabiliyorsa (örneğin, yerel wifi ağındayken bağlantısı kesilmiş çalışmaya izin vermek için), önce akıllı anahtar ve cep telefonu arasında eşleştirme yapmanız gerekir. Eşleştirme, bir anahtar değişimi, tercihen kaynaklar izin veriyorsa genel anahtar değişimi, aksi takdirde gizli anahtarların anlaşması anlamına gelir. Bu eşleştirmenin amacı, her cihazın kiminle konuştuğunu bilmesini sağlamaktır.

İster doğrudan mobil cihazdan akıllı anahtara veya bir sunucu aracılığıyla olsun, kontrol kanalını güvenli hale getirmeniz gerekir. Yetkilendirmeyi düşünün: anahtara farklı erişim düzeyleri var mı, örneğin yeniden yapılandırmaya izin veren bir kontrol seviyesi ve sadece açma / kapama geçişine izin veren temel bir kanal? Bu genellikle güvenli kanal (mümkünse TLS) oluşturulduktan sonra bir kimlik doğrulama adımı ile gerçekleştirilir.

Bir diğer husus, ürün yazılımı güncellemeleri. Bu zor bir şey: bir yandan mutlak güvenlik diye bir şey yoktur, bu yüzden arada sırada uygulanacak güvenlik yamalarınız olacaktır. Öte yandan, bir ürün yazılımı yükseltme mekanizması karmaşık bir şeydir ve kendisinde hatalar olabilir. En azından, ürün yazılımı yükseltmelerinizin imzalandığından emin olun. Yalnızca yükseltmeler için iletişim kanalının güvenliğine güvenmek tehlikeli, çünkü güvenli bir kanal için güvenilen güvenilir bir statik güvenlik doğrulamasından daha büyüktür ve bazen bir ağ bağlantısı olmadan ürün yazılımı güncellemelerini uygulamak isteyebilirsiniz. İmzayı doğrulamaya ek olarak, ideal olarak geri çekilmeye karşı biraz korumanız olmalıdır, böylece bir rakip '

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.