14.3.4. Flash okuma korumasıyla ilgili bir not¶
Sevkiyatı yapılan bir OpenMV kamerasındaki aygıt yazılımı (firmware), kutudan çıktığı haliyle cihaza fiziksel erişimi olan herkes tarafından okunabilir durumdadır. Kamerayı eline geçiren bir saldırgan, hata ayıklama başlığına bir SWD probu bağlayabilir, MCU’nun hata ayıklama arayüzüyle iletişim kurabilir ve flash belleğin dökümünü alabilir – ki bu, dondurulmuş her Python modülünü ve ROMFS bölümünün içeriğini kapsar. Standart OpenMV aygıt yazılımı, flash okuma korumasını varsayılan olarak etkinleştirmez.
Bu sayfa, bir ürünü sevk eden bir ekibin sorumluluğun nerede olduğunu bilmesi için bunu açıkça belgelemektedir.
14.3.4.1. Kameranın varsayılan olarak yaptıkları¶
Kameranın önyükleyicisi (bootloader) ve çalışma zamanı, altta yatan MCU’nun herhangi bir okuma koruması özelliğini açmaz. Hata ayıklama arayüzü açık kalır, flash bellek okunabilir kalır ve yapı, bir geliştiricinin tezgahında çalıştığı şekilde çalışır. Bu, eğitim hedef kitlesi için doğru olan varsayılandır – okuma koruması açık olarak sevk edilen bir kamera, IDE üzerinden yeniden flashlanamayan, başarısız bir dağıtımın ardından yeniden imajlanamayan ve yapı ekibi dışında hiç kimse tarafından kurtarılamayan bir kameradır.
Kamera bir “geliştirici cihazı”ndan bir “ürün”e dönüştüğünde bu denge değişir. Değeri, uygulama kodunun gizli kalmasına bağlı olan bir ürün, korumayı kendisi etkinleştirmek zorundadır; OpenMV aygıt yazılımı bunu yapmaz.
14.3.4.2. Ürün ekibinin yaptıkları¶
Her MCU üreticisi bir okuma koruması mekanizması sunar. Ayrıntılar farklılık gösterir – bit düzeyinde sigortalar, tek seferlik yaşam döngüsü geçişleri, imzalı flash imajları – ancak ortak yapı şudur:
Üreticiye özgü bir bit (veya bit kümesi), genellikle MCU’nun hata ayıklama portuyla son bir kez iletişim kuran bir üretici aracı aracılığıyla silikona kaydedilir.
Kayıttan sonra hata ayıklama portu flash belleği okumayı reddeder. Kamera yine de önyükler ve uygulamayı çalıştırır; sadece içeriğini artık bir proba ifşa etmez.
Kayıt geri alınamaz. Kamerayı yok etmeden hata ayıklanabilir bir duruma geri getirmenin hiçbir yolu yoktur.
Bunu kurmak MCU’ya özgüdür ve adımlar, korunan kameradaki parçaya bağlıdır. Üreticinin başvuru kılavuzu doğruluğun kaynağıdır; bir üretim hattında bunu doğru yapmak için üretici desteği kullanılacak kanaldır.
Bu, işin kolay kısmıdır.
Zor kısım, bir saldırganın kamerada kod çalıştırmak veya uygulamanın ne yaptığını okumak için sahip olduğu diğer her yolu kapatmaktır. Okuma koruması yalnızca bir hata ayıklama probunun flash belleğin dökümünü almasını engeller. Kameranın yine de kapatması gerekenler:
MicroPython REPL’i. USB’ye bağlı bir REPL, rastgele Python kabul eder. Okuma koruması bunu değiştirmez. Bir REPL oturumu RAM’i okuyabilir, fonksiyonları çağırabilir, çalışan uygulamanın görebildiği her şeyi sızdırabilir – yani erişilebilir bir REPL, okuma korumasının sağladığı her şeyi atlatır. REPL erişimini devre dışı bırakmak, ürün ekibinin sahip olduğu bir aygıt yazılımı yapı değişikliğidir.
IDE betik yüklemesi. IDE’nin “bu betiği kamerada çalıştır” yolu, REPL’in kullandığı aynı USB protokol yüzeyini kullanır. REPL’i kapatmak bunu da onunla birlikte kapatır; ikisinden birini açık bırakmak, kameraya rastgele kod çalıştırma kanalı bırakır.
Giriş noktasını dosya sisteminden ele geçirme. Uygulama Betikleri aygıt yazılımına dondurma aracılığıyla sevk edildiğinde bu zaten kapatılmıştır – çalışma zamanı, herhangi bir dosya sistemi kopyasından önce dondurulmuş
boot.pyvemain.pydosyalarını çözümler, dolayısıyla flash belleğe veya SD’ye bırakılan hiçbir şey bunları geçersiz kılamaz. Uygulama yapıya dahil edildikten sonra bu koruma ücretsizdir.Daha yeni kameralarda harici flash. Uygulama imajını harici flash bellekte saklayan kameralar, bu imajı PCB üzerinde açıkça duran bir çipe yerleştirir; çip lehimden sökülüp hazır araçlarla doğrudan okunabilir veya yerinde, veri yolunu problayarak okunabilir. Bunu korumak için; flash bellek içeriğini okumalar sırasında şifreleyen çip üstü donanımı açmak, şifreleme anahtarını üretmek, bu anahtarı kameraya sağlamak ve onu MCU’nun bir kez programlanabilir depolamasına geri alınamaz şekilde yakmak gerekir. Bunların her biri ayrı bir tek seferlik işlemdir ve bir üretim biriminde yanlış yapılan herhangi biri o birimi kullanılamaz hale getirir.
Bu listedeki her madde, kendi başına bir aygıt yazılımı yapı işi, üretim hattı adımları ve geri alınamaz kayıt yığınıdır. Gerçek anlamda kilitlenmiş bir ürün; özelleştirilmiş bir aygıt yazılımı yapısı, özelleştirilmiş bir önyükleyici, birim başına anahtar sağlayan bir üretim akışı ve birim hattan ayrılmadan önce kilidin gerçekten kapalı olduğunu kanıtlayan bir dizi testtir. Bu, günler değil aylar süren bir iştir ve geri alınamazlık, hataların birimlere mal olması anlamına gelir.
Varsayılanın neden açık olduğu
Bu liste, aynı zamanda standart OpenMV aygıt yazılımının neden okuma koruması etkinleştirilmeden sevk edildiğinin de nedenidir. REPL’i kapalı, IDE betik yüklemesi devre dışı ve aygıt yazılımı kilitli bir kamera, üzerinde hiç geliştirme yapılamayan bir kameradır – OpenMV kameralarını kullanılabilir kılan iş akışının kendisi yok olurdu. Varsayılan, her şeyi açık bırakır; ürün ekibi, sevk edilen bir birime giden yolda hangi parçaları kapatacağını seçer.
14.3.4.3. Fiziksel erişimin hâlâ sağladıkları¶
Okuma koruması açık olsa bile, kamerayı elinde tutan bir saldırgan hayli fazla şey yapabilir:
Kameranın çıktılarını dinleyerek ağ trafiğini yeniden oynatabilir.
Görünür davranışını gözlemleyebilir ve girdilere nasıl tepki verdiğini çıkarabilir.
Bazı durumlarda, korunan MCU’ya özel hata enjeksiyonu veya yan kanal saldırıları aracılığıyla gizli bilgileri kurtarabilir.
Okuma koruması, uygulamanın kaynağına ulaşmanın maliyetini artırır. Maliyeti ortadan kaldırmaz. “Fiziksel erişim = ele geçirme”, bir güvenlik incelemesinin başlangıç noktası olması gereken çalışma varsayımıdır; koruma mekanizması yalnızca bu ele geçirmenin zaman ve ekipman açısından ne kadara mal olacağını belirler.
14.3.4.4. OpenMV aygıt yazılımının birlikte sevk edildiği şeyler¶
Somut olması için bir özet:
Varsayılan olarak etkinleştirilmiş okuma koruması yoktur.
Standart aygıt yazılımında bunu açan bir yapı bayrağı yoktur.
MicroPython’dan çağrılacak uygulama düzeyinde bir API yoktur.
Korumaya ihtiyaç duyan bir ürün, özelleştirilmiş aygıt yazılımıyla sevk edilir. Bu özelleştirme, kartın önyükleyicisinde ve üretim akışında yer alır ve OpenMV kod tabanının dışındadır. Bunu ilk kez yapan ekipler, bunu sona eklenecek bir şey olarak değil, ayrı bir iş parçası olarak geliştirme zaman çizelgesine dahil etmeyi planlamalıdır – geri alınamazlık, “sonra ekleriz” yaklaşımını pahalı kılar.