Microsoft, C Kodu Güvenliğini Artıracak Donanım Çözümü CHERIOT'u Açıyor

Microsoft, C ve C++ dilindeki mevcut kodlardaki güvenlik sorunlarını engellemeyi amaçlayan CHERIoT (Nesnelerin İnterneti için RISC-V'ye Yetenek Donanım Uzantısı) projesiyle ilgili gelişmeleri keşfetti. CHERIoT, mevcut C/C++ kod tabanlarını yeniden çalışmaya gerek kalmadan korumanıza olanak tanıyan bir çözüm sunar. Koruma, işlemci tarafından sağlanan ve donanım düzeyinde bellek erişimini izleyen, işaretçilerle çalışmanın doğruluğunu kontrol eden ve kod bloklarının izolasyonunu sağlayan özel bir genişletilmiş işlemci talimatları seti (ISA) kullanan değiştirilmiş bir derleyicinin kullanılmasıyla gerçekleştirilir.

Proje, C dilinin düşük seviyeli doğasının, bellekle çalışırken hata kaynağı haline geldiği, arabellek taşması, önceden serbest bırakılan belleğe erişim, işaretçi referansları veya çift serbest bırakma gibi sorunlara yol açtığı gerçeği göz önünde bulundurularak oluşturuldu. . Uygulama, katı bir değişiklik inceleme politikasına sahip olan ve modern geliştirme yöntemlerini ve statik analiz araçlarını kullanan Google ve Microsoft gibi büyük şirketlerin bile bellekle çalışırken hataların bulunmadığını garanti edemediğini göstermektedir (örneğin, Microsoft'taki güvenlik açıklarının yaklaşık% 70'i). ve Google, güvenli olmayan bellek kullanımından kaynaklanmaktadır).

Sorun, bellekle güvenli çalışmayı garanti eden programlama dilleri veya ek denetimlerle bağlamalar kullanılarak, örneğin boş bellek alanlarına erişim için ek denetimler gerçekleştiren MiraclePtr (raw_ptr) gibi sıradan işaretçiler yerine kullanılarak çözülebilir. Ancak bu tür yöntemler yeni kod için daha uygundur ve mevcut C/C++ projelerinin yeniden işlenmesi, özellikle gömülü sistemler ve Nesnelerin İnterneti cihazları gibi kaynak açısından kısıtlı ortamlarda çalışacak şekilde tasarlandıkları takdirde oldukça sorunludur.

CHERİoT donanım bileşenleri, "yetenek" (her okuma ve yazma) temelinde kontrollü bellek erişimi modeli sağlayan korumalı CHERI (RISC-V'ye Yetenek Donanım Uzantısı) işlemci mimarisini uygulayan, RISC-V mimarisini temel alan bir mikro denetleyici olarak tasarlanmıştır. belleğe işlem yapılmasına izin verilir). CHERIoT'ta sağlanan talimat seti mimarisine (ISA) dayanarak, bireysel nesneler düzeyinde bellekle çalışmanın güvenliğini garanti eden, halihazırda serbest bırakılmış belleğe erişime karşı koruma sağlayan ve hafif bir bellek erişim izolasyon sistemi uygulayan bir yazılım modeli oluşturulmuştur. . Belirtilen yazılım koruma modeli doğrudan C/C++ dil modeline yansıtılır ve bu da mevcut uygulamaları korumak için kullanılmasına olanak tanır (yalnızca yeniden derlemek ve ISA CHERIoT'u destekleyen ekipman üzerinde çalıştırmak gerekir).

Önerilen çözüm, bir nesnenin bellek sınırlarının ötesine geçmesine neden olan hataları engellemenize olanak tanır, işaretçi değişikliğine izin vermez (tüm işaretçiler mevcut işaretçilerden oluşturulmalıdır) ve serbest bırakıldıktan sonra bellek erişimini izler (yanlış bir kod kullanarak belleğe herhangi bir erişim) işaretçi veya serbest bırakılan bir nesneye başvuran bir işaretçi, bir istisnanın oluşmasına neden olur). Örneğin, CHERIoT'u kullanmak, herhangi bir kod değişikliği gerektirmeden güvenilmeyen verileri işleyen bileşenlerde otomatik sınır denetimi, bellek ömrü izleme ve işaretçi bütünlüğü uygulamasını uygulamanıza olanak tanır.

Proje, genişletilmiş CHERIoT komut seti mimarisinin bir spesifikasyonunu, CHERIoT ISA'yı destekleyen bir 32 bit RISC-V CPU'nun referans uygulamasını ve değiştirilmiş bir LLVM araç kitini içerir. Verilog'daki CPU prototip şemaları ve donanım bloğu açıklamaları Apache 2.0 lisansı altında dağıtılmaktadır. LowRISC projesindeki Ibex çekirdeği CPU'nun temeli olarak kullanıldı. CHERIoT ISA kod modeli Sail dilinde tanımlanmıştır ve BSD lisansı altında lisanslanmıştır.

Ek olarak, 256 MB RAM'e sahip gömülü sistemlerde bile bölmeleri izole etme yeteneği sağlayan gerçek zamanlı işletim sistemi CHERIoT RTOS'un bir prototipi önerilmektedir. CHERIoT RTOS kodu C++ ile yazılmıştır ve MIT lisansı altında dağıtılmaktadır. İşletim sisteminin önyükleyici, zamanlayıcı ve bellek dağıtım sistemi gibi temel bileşenleri bölmeler şeklinde tasarlanmıştır.

CHERIoT RTOS'taki bir bölme, paylaşılan bir kitaplığa benzeyen izole edilmiş bir kod ve global değişkenler kombinasyonudur, ancak ikincisinden farklı olarak durumunu değiştirebilir (değişebilir) ve ayrı bir güvenlik bağlamında çalışabilir. Özel olarak tanımlanmış giriş noktalarına erişim ve başka bir bölmeyi çağırırken açıkça iletilen nesnelere işaretçiler kullanma dışında, dışarıdan hiçbir kod kontrolü bir bölmedeki koda aktaramaz ve nesnelere erişemez. Bir bölmedeki kod ve genel nesneler için bütünlük ve gizlilik garanti edilir.

Kaynak: opennet.ru

Yorum ekle