Hash fonksiyonlarının gizli tehlikeleri: uzunluk uzatma saldırıları ve sunucu tarafı güvenlik riskleri

Giriiş

Uzunluk Uzatma Saldırısı, belirli türdeki hash fonksiyonlarının (MD5, SHA-1 ve SHA-2 gibi) özelliklerine ilişkin bir saldırıdır. Basit bir ifadeyle, bu saldırı, H(mesaj)'ı ve mesajın uzunluğunu bilerek, mesajın kendisini bilmeden H(mesaj || dolgu || uzantısı)'nı kolayca hesaplayabileceğimiz gerçeğinden yararlanır. "||" bağlantıyı temsil ederken, hash fonksiyonunun hükümlerine göre "doldurma" eklenir.

Bunun nedeni, bu karma fonksiyonlarının, girişi bloklara bölen bir Merkle-Damgard yapısı kullanması ve her bloğun karma değerinin önceki bloğun karma değerine bağlı olmasıdır. Bu, belirli bir mesajın karmasını hesapladığımızda, başlayıp daha fazla blok ekleyebileceğimiz bir duruma sahip olduğumuz anlamına gelir.

Sunucu tarafı doğrulama modu

Güvenlik açığı senaryolarının açıklamasını kolaylaştırmak için, öncelikle böyle bir sunucu tarafı kimlik doğrulama modunun olduğunu, yani bir kullanıcı oturum açmaya çalıştığında, sunucunun kullanıcının kimliğine, adına ve Yalnızca sunucu tarafından bilinen 30 bitlik anahtar Algoritma bir hash değeri oluşturur ve bunu istemciye gönderir. Daha sonra, istemci, kullanıcı izinlerini değiştirmek için kullanılan arayüz gibi belirli arayüzlere erişmeye çalıştığında, sunucu, rol kimliğine, rol adına, rol izinlerine ve ön tarafın aynı 30 bitlik anahtarına dayalı olarak doğrulama için bir karma oluşturacaktır. POST'u sonlandır. Yüklenen karma, sunucu tarafından oluşturulan karma ile tutarlıysa doğrulama başarılı kabul edilir ve yeni rol izinleri veritabanına yazılır.

Anlamayı kolaylaştırmak için, açıklamaya göre yazılmış bazı basit kodları örnek olarak aşağıda bulabilirsiniz:

Yetkiyi temin eder

Doğrulama modundaki güvenlik açıkları nedeniyle bir saldırgan, SecretKey'i bilmeden işlem isteğini yeniden oluşturarak izin doğrulamayı atlayabilir. Yetkisiz saldırının temel fikri, uzunluk uzatma saldırısının özelliklerini kullanmaktır. Saldırganın öncelikle orijinal hash değerini elde etmesi ve orijinal verinin uzunluğunu basit bir yinelemeli algoritma yoluyla hesaplaması gerekir. Bu bilgi elde edildikten sonra, orijinal verilere yetkisiz ek parametreler eklenebilir ve aynı karma algoritması, kötü amaçlı karma değerleri oluşturmak için kullanılabilir.

Uzunluk uzatma saldırı ilkesi

Uzunluk Uzatma Saldırısı, karma fonksiyonunun bir kısmının iç mekanizması nedeniyle meydana gelir. Bu işlevler, giriş verilerini işlemeden önce verileri sabit uzunluktaki parçalara böler ve ardından belirli gereksinimleri karşılamak için her bir parçanın sonuna dolgu yapar. Bu tasarım, saldırganın orijinal mesajın karma değerini ve uzunluğunu bilerek yeni verileri doldurarak ve ekleyerek yeni bir etkili karma değer oluşturmasına olanak tanır.

Örneğin 512 bitlik bloklarda çalışan SHA-256'yı ele alalım. Uzunluğu 512 bitin katı olmayan veriler için dolgu gereklidir. Doldurma kuralları aşağıdaki gibidir:

  1. Verinin sonuna bir "1" biti ekleyin;

  2. Veri modulo 512'nin uzunluğunun 448'e eşit olması için belirli sayıda "0" bit ekleyin (ayrıntılar için bkz. [1] );

  3. Orijinal verinin uzunluğunu belirten, sonuna 64 bit uzunluğunda bir blok ekleyin.

Kısacası, 512*n uzunluğunda bir dolgu mesajı üretmek için mesajın sonuna bir "1" ve ardından m "0" artı 64 bitlik veya 128 bitlik bir tam sayı eklenir. Eklenen tamsayı orijinal mesajın uzunluğudur. Doldurma mesajı daha sonra karma işlevi tarafından n adet 512 bitlik bloklara işlenir.

Yapım metodu

Bu örnekte, yukarıdaki resimde belirtilen kodu belirli bir senaryo olarak kullanacağız; burada veri dizisi data="user_id=1&user_name=aa" ve anahtar ise SecretKey="Length_extension\ _attack\ _gizli". Sunucu, yüklenen verilerdeki veri alanını ayrıştıracak ve sınırlayıcı & aracılığıyla gerekli kullanıcı_id ve kullanıcı_adı parametrelerini ayrıştıracaktır. Rol alanı mevcutsa sunucu bu alanın değerini de alacaktır. Sunucu daha sonra SecretKey ile tüm alanlara hash uygulayacak ve yüklenen doğrulama hash'iyle karşılaştıracaktır. Hash değerleri tutarlı ise parametrenin kurallara uygun olduğu kabul edilir ve doğrudan kullanılır.

Öncelikle, verilere ve SecretKey'e dayalı SHA-256 kullanılarak oluşturulan hash = "37d310d3465506486431fb2c2eb163f0f470479703f66dc9e5fdead8a3390c68" hash değerini elde etmek için LoginHandler arayüzüne giriş yapıyoruz.

Daha sonra çatlamanın zorluğuna bakacağız. Test durumumuzu örnek alırsak uzunluk uzatma saldırısı prensibine göre H(mesaj) ve mesajın uzunluğunu bildiğimiz sürece uzunluk uzatma saldırısı ile yeni veriler ekleyebiliriz. Orijinal mesaj = SecretKey + data, şimdi elimizde H(mesaj) var, yeni bir hash değeri oluşturmak için sadece mesajın uzunluğunu bilmemiz gerekiyor. SecretKey 30 bitlik bir anahtar olduğundan gerçek mesaj uzunluğu yalnızca 30 yinelemeden sonra bilinebilir. Bu nedenle kolaylıkla yeni bir hash değeri oluşturabiliriz. Yönetici izinlerini kullanmamız gerektiğinden, kötü amaçlı "&role=admin" alanını orijinal verilere eklememiz gerekiyor.

SecretKey'i bilmeden yeni veriler eklemek ve yeni bir hash değeri oluşturmak için uzunluk uzatma saldırısı özelliğinden faydalanabiliriz. Burada zaten bu işlevi uygulayan bir kütüphane kullanıyoruz [2] Testi tamamlamak için. Daha sonra yeni bir karma değeri oluşturmak için aracı kullanın.

AdminActionHandler'ın arayüz doğrulaması, yüklenen kullanıcı_id, kullanıcı_adı ve role göre hash'i doğruladığından, şu anda yüklediğimiz veriler kullanıcı_id=1, kullanıcı_adı=aa\x80\x00\x00\x00 \ x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x70 ve role=admin, aşağıdaki şekilde gösterildiği gibi:

Karma değeri 84ae4ae437eeabf3bd8a26294392770b86f64a81998194156ac003d58a21acd0'dır. Daha sonra adminActionHandler arayüzünü çağırabilirsiniz.Verileri aldıktan sonra sunucu, yüklenen hash'i sha256 (SecretKey + fakeData) ile karşılaştıracak ve doğrulamayı geçtikten sonra bazı hassas işlemleri gerçekleştirecektir. Bu sayede sunucu tarafı doğrulamayı atlamak ve yetkisiz işlemler gerçekleştirmek için uzunluk uzatma saldırısını başarıyla kullandık.

Diğer olası saldırı senaryoları

1. Dosya Bütünlüğü Doğrulaması: Dosyanın bütünlüğü, anahtar ve dosya içeriğinin birleştirilmesi ve ardından karma işlemi uygulanmasıyla doğrulanırsa, saldırgan dosyayı genişletebilir ve geçerli bir karma oluşturabilir, böylece bütünlük kontrollerini atlayabilir;

2. Web uygulaması güvenliği: Web uygulamalarında, kullanıcı tarafından gönderilen verileri doğrulamak için uzunluk uzatma saldırılarına açık bir karma işlevi kullanılırsa, saldırganlar kötü amaçlı verileri göndermek için bundan yararlanabilir;

3. Dijital imza: Bazı dijital imza düzenlerinde, imza, özel anahtarın ve mesajın birleştirilmesi ve ardından karma işlemi yapılması yoluyla oluşturulursa, saldırgan mesajı genişletebilir ve geçerli bir imza oluşturabilir;

4. Şifre saklama: Yaygın olmasa da, bir şifre, bir anahtar (örneğin, tuz) ile bir şifrenin birleştirilmesi ve ardından karma işlemi yapılması yoluyla saklanıyorsa, saldırgan, uzunluk uzatma saldırı şifresi kullanarak şifreyi kırmaya çalışabilir.

Nasıl önlenir

1. SHA-3 gibi uzunluk uzatma saldırılarına karşı savunmasız olmayan bir karma işlevi seçin;

**2. HMAC kullanın: **HMAC giriş olarak bir anahtar ve bir mesaj gerektirir ve çıktı sonuçları hem anahtara hem de mesaja bağlıdır, dolayısıyla saldırgan anahtarı bilmeden uzunluk uzatma saldırıları gerçekleştiremez;

**3. Yetki doğrulamayı güçlendirin: **Sunucu tarafına, çok faktörlü kimlik doğrulamanın kullanılması gibi ek yetki doğrulama adımları ekleyin.

Yaygın olarak kullanılan bazı Hash algoritmalarının özellikleri şunlardır:

| Algoritma | Çarpışma Direnci | Seçilmiş Önek Çarpışma Saldırısı | Ön Görüntü Direnci | Uzunluk Uzatma Saldırısı | | --- | --- | --- | --- | --- | | MD5 | 2^18 | 2^39 | 2^123,4 | Savunmasız| | SHA-1 | 2^61,2 | 2^63,4 | 2^160 | Savunmasız | | SHA-256 (SHA-2) | 2^65,5 | - | 2^254,9 | Savunmasız| | SHA-512 (SHA-2) | 2^32,5 | - | 2^511,5 | Savunmasız| | SHA-3 | 2^50 | - | Bilinmiyor | Savunmasız | | BLAKE2'ler | 2^112 | - | 2^241 | Korunmasız | | BLAKE2b | 2^224 | - | 2^481 | Savunmasız |

Çözüm

Uzunluk uzatma saldırılarına karşı etkili bir savunma, SHA-3 ve BLAKE2 gibi bu tür saldırılara karşı bağışık olan hash işlevlerinin kullanılmasıdır. Ayrıca HMAC (anahtarlı karma mesaj kimlik doğrulama kodu) yapısı aracılığıyla da korunabilmektedir. Bu önlemler sistem güvenliğini etkili bir şekilde iyileştirebilir ve veri bütünlüğünü ve uygulama kararlılığını sağlayabilir.

Referans bağlantısı:

[1]

[2]

View Original
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.
  • Reward
  • Comment
  • Repost
  • Share
Comment
0/400
No comments
  • Pin
Trade Crypto Anywhere Anytime
qrCode
Scan to download Gate App
Community
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)