Move dilinde referans güvenliği doğrulama için tam sayı taşması açığı analizi
Son zamanlarda, araştırmacılar Aptos Moveevm'i derinlemesine analiz ederken yeni bir tamsayı taşma açığı keşfettiler. Bu açık, Move dilinin referans güvenliği doğrulama sürecinde, özellikle reference_safety adımında bulunmaktadır. Bu makalede, bu açığın derinlemesine incelenecek ve tetiklenme süreci ile potansiyel etkileri açıklanacaktır.
Move dili doğrulama süreci
Move dili, bayt kodunu çalıştırmadan önce kod birimi doğrulaması yapar ve bu süreç 4 adımda gerçekleşir. Bu keşfedilen güvenlik açığı, reference_safety adımında ortaya çıkmıştır. Bu adım, referans güvenliğini doğrulamak için kullanılır ve askıda kalan referansların olup olmadığını, değişken referans erişiminin güvenli olup olmadığını, küresel depolama referans erişiminin güvenli olup olmadığını kontrol eder.
Doğrulama süreci öncelikle temel blokları tanımlar. Move dilinde, temel bloklar bayt kodunu tarayarak, tüm dal talimatları ve döngü talimatı dizilerini bularak belirlenir. Her temel blok, giriş ve çıkış dışında dal talimatı olmayan bir kod dizisidir.
Alıntı Güvenlik Doğrulama Mekanizması
Move dili, değişmez referans (&) ve değişebilir referans (&mut) olmak üzere iki türü destekler. Referans güvenlik doğrulama modülü, fonksiyon bazında, fonksiyondaki her temel bloğun bytecode talimatlarını tarayarak tüm referans işlemlerinin geçerli olup olmadığını belirler.
Doğrulama süreci, durumu temsil etmek için AbstractState yapısını kullanır ve iki temel bileşen içerir: borç grafiği ve yerel değişkenler. Doğrulama sırasında, temel blokların öncesi ve sonrası durum değişiklikleri karşılaştırılır ve sonuç sonraki bloklara iletilir.
Açık Ayrıntıları
Açık, join_ fonksiyonunda bulunuyor. Bu fonksiyon, temel blokların öncesi ve sonrasındaki durumları birleştirmek için kullanılır. Sorun, iter_locals() yönteminde, bu yöntem u8 türünde bir iterator döndürüyor. Fonksiyon parametrelerinin uzunluğu ile yerel değişkenlerin toplam uzunluğu 256'yı aştığında, bu tam sayı taşmasına neden oluyor.
Move dilinin locals sayısını kontrol eden bir süreci olmasına rağmen, yalnızca yerel değişken sayısını kontrol etmektedir, parametre uzunluğunu içermemektedir. Bu, geliştiricilerin bir dikkatsizliği olabilir.
Açıkların Kullanımı ve Etkisi
Bu tam sayı taşma açığını kullanarak, bir saldırgan özel döngü kod blokları oluşturabilir ve bloğun durumunu değiştirebilir. Temel blok yeniden çalıştırıldığında, eğer talimatın eriştiği indeks yeni locals haritasında yoksa, hizmet reddi (DoS) ile sonuçlanabilir.
Özellikle, reference safety modülünde, MoveLoc/CopyLoc/FreeRef gibi opcode'lar, var olmayan bir LocalIndex'e erişim nedeniyle panic ile sonuçlanabilir ve bu da tüm düğümün çökmesine yol açabilir.
Özet ve Öneriler
Bu açık, dikkatlice tasarlanmış dillerin bile güvenlik açıkları barındırabileceğini bir kez daha kanıtladı. Move dili için önerimiz:
Kod denetimini güçlendirin, benzer ihmalden kaçının.
Move çalışma zamanında daha fazla kontrol kodu ekleyin, yalnızca doğrulama aşamasının güvenlik kontrollerine güvenmeyin.
Çalışma aşamasında güvenlik güçlendirme önlemleri ekleyin, böylece doğrulamanın atlanmasının ardından daha ciddi sorunların ortaya çıkmasını önleyin.
Move dilinin güvenlik araştırmalarında öncülerden biri olarak, ilgili güvenlik sorunlarını derinlemesine keşfetmeye devam edeceğiz ve Move ekosisteminin sağlıklı gelişimine katkıda bulunacağız.
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
21 Likes
Reward
21
9
Share
Comment
0/400
LiquidationWatcher
· 07-07 17:46
aman tanrım bir başka defi istismarı... şu anda bana 2022 anılarını hatırlatıyor
View OriginalReply0
BearMarketSunriser
· 07-07 02:16
move mahkum ah,炒a hala炒b'den daha iyi değil
View OriginalReply0
SundayDegen
· 07-06 08:36
Tüh bu hata gerçekten biraz basit.
View OriginalReply0
MoonRocketman
· 07-05 04:47
Move'un engelleme yüksekliği 256 kaybedildi, roket düşüş riski konusunda dikkatli olun.
View OriginalReply0
Web3ProductManager
· 07-05 04:47
dönüşüm hunisi verilerine bakarken, bu taşma hatası = büyük bir kullanıcı deneyimi friction açıkçası
Move dilinde güvenli doğrulama tam sayısı taşma açığı analizi
Move dilinde referans güvenliği doğrulama için tam sayı taşması açığı analizi
Son zamanlarda, araştırmacılar Aptos Moveevm'i derinlemesine analiz ederken yeni bir tamsayı taşma açığı keşfettiler. Bu açık, Move dilinin referans güvenliği doğrulama sürecinde, özellikle reference_safety adımında bulunmaktadır. Bu makalede, bu açığın derinlemesine incelenecek ve tetiklenme süreci ile potansiyel etkileri açıklanacaktır.
Move dili doğrulama süreci
Move dili, bayt kodunu çalıştırmadan önce kod birimi doğrulaması yapar ve bu süreç 4 adımda gerçekleşir. Bu keşfedilen güvenlik açığı, reference_safety adımında ortaya çıkmıştır. Bu adım, referans güvenliğini doğrulamak için kullanılır ve askıda kalan referansların olup olmadığını, değişken referans erişiminin güvenli olup olmadığını, küresel depolama referans erişiminin güvenli olup olmadığını kontrol eder.
Doğrulama süreci öncelikle temel blokları tanımlar. Move dilinde, temel bloklar bayt kodunu tarayarak, tüm dal talimatları ve döngü talimatı dizilerini bularak belirlenir. Her temel blok, giriş ve çıkış dışında dal talimatı olmayan bir kod dizisidir.
Alıntı Güvenlik Doğrulama Mekanizması
Move dili, değişmez referans (&) ve değişebilir referans (&mut) olmak üzere iki türü destekler. Referans güvenlik doğrulama modülü, fonksiyon bazında, fonksiyondaki her temel bloğun bytecode talimatlarını tarayarak tüm referans işlemlerinin geçerli olup olmadığını belirler.
Doğrulama süreci, durumu temsil etmek için AbstractState yapısını kullanır ve iki temel bileşen içerir: borç grafiği ve yerel değişkenler. Doğrulama sırasında, temel blokların öncesi ve sonrası durum değişiklikleri karşılaştırılır ve sonuç sonraki bloklara iletilir.
Açık Ayrıntıları
Açık, join_ fonksiyonunda bulunuyor. Bu fonksiyon, temel blokların öncesi ve sonrasındaki durumları birleştirmek için kullanılır. Sorun, iter_locals() yönteminde, bu yöntem u8 türünde bir iterator döndürüyor. Fonksiyon parametrelerinin uzunluğu ile yerel değişkenlerin toplam uzunluğu 256'yı aştığında, bu tam sayı taşmasına neden oluyor.
Move dilinin locals sayısını kontrol eden bir süreci olmasına rağmen, yalnızca yerel değişken sayısını kontrol etmektedir, parametre uzunluğunu içermemektedir. Bu, geliştiricilerin bir dikkatsizliği olabilir.
Açıkların Kullanımı ve Etkisi
Bu tam sayı taşma açığını kullanarak, bir saldırgan özel döngü kod blokları oluşturabilir ve bloğun durumunu değiştirebilir. Temel blok yeniden çalıştırıldığında, eğer talimatın eriştiği indeks yeni locals haritasında yoksa, hizmet reddi (DoS) ile sonuçlanabilir.
Özellikle, reference safety modülünde, MoveLoc/CopyLoc/FreeRef gibi opcode'lar, var olmayan bir LocalIndex'e erişim nedeniyle panic ile sonuçlanabilir ve bu da tüm düğümün çökmesine yol açabilir.
Özet ve Öneriler
Bu açık, dikkatlice tasarlanmış dillerin bile güvenlik açıkları barındırabileceğini bir kez daha kanıtladı. Move dili için önerimiz:
Move dilinin güvenlik araştırmalarında öncülerden biri olarak, ilgili güvenlik sorunlarını derinlemesine keşfetmeye devam edeceğiz ve Move ekosisteminin sağlıklı gelişimine katkıda bulunacağız.