2023 yılının 2 Şubat'ında, Ethereum ve Binance Akıllı Zinciri üzerindeki OrionProtocol, sözleşme açığı nedeniyle yeniden giriş saldırısına uğradı ve yaklaşık 2,9 milyon dolar kaybetti. Bu kaybın içinde Ethereum üzerinde 2.844.766 USDT ve Binance Akıllı Zinciri üzerinde 191.606 BUSD bulunmaktadır.
Saldırı Süreci Analizi
Saldırgan öncelikle bir Token sözleşmesi oluşturdu ve ilgili transfer ve yetkilendirme işlemleri gerçekleştirdi, böylece sonraki saldırıya hazırlık yaptı. Ardından, saldırgan UNI-V2'nin swap yöntemini kullanarak borç aldı ve ExchangeWithAtomic sözleşmesinin swapThroughOrionPool yöntemini çağırarak token değişimi yaptı. Değişim yolu USDC → saldırganın oluşturduğu Token → USDT olarak ayarlandı.
Dönüşüm sürecinde, saldırganlar tarafından oluşturulan Token sözleşmesinde geri çağırma işlevi bulunduğundan, ExchangeWithAtomic.swapThroughOrionPool yönteminin yürütülmesi sırasında Token.Transfer aracılığıyla ExchangeWithAtomic.depositAsset yöntemine sürekli geri çağırma gerçekleşmiş ve bu da yeniden giriş saldırısına yol açmıştır. Bu, depozito miktarının sürekli birikmesine neden olmuş ve sonuç olarak saldırgan, para çekme işlemiyle kâr elde etmiştir.
Fon Akışı
Saldırganın başlangıç fonları, bir ticaret platformunun sıcak cüzdan hesabından gelmektedir. Elde edilen 1.651 ETH'nin 657,5'i hala saldırganın cüzdan adresinde bulunuyor, geri kalanı ise karıştırma hizmetleri aracılığıyla transfer edilmiştir.
Açık Analizi
Açığın temel sorunu doSwapThroughOrionPool fonksiyonunda ortaya çıkıyor. Bu fonksiyon, _doSwapTokens fonksiyonunu çağırıyor ve bu fonksiyonda, token transfer işlemi curBalance güncellenmeden önce gerçekleşiyor. Saldırganlar, özelleştirilmiş Token'ın transfer fonksiyonuna eklenen geri çağırma işlevini kullanarak, curBalance güncellenmeden önce depositAsset fonksiyonunu yeniden çağırıyorlar, bu da curBalance'ın yanlış güncellenmesine neden oluyor. Sonuç olarak, saldırganlar, flash loan'ı geri ödedikten sonra, withdraw fonksiyonunu çağırarak fonları çekerek saldırıyı tamamlıyorlar.
Önleme Önerileri
Sözleşme tasarımı sırasında, birden fazla Token ve değişim yollarının olası risklerini dikkate almak gerekir.
"Önce kontrol et, sonra değişkenleri güncelle, en son dış çağrılar yap" kodlama standartlarına (Checks-Effects-Interactions modeli) uymak, sözleşme güvenliğini etkili bir şekilde artırabilir.
Token değişim fonksiyonu uygulanırken, özellikle tekrar giriş saldırısı riskine dikkat edilmesi gerekir; koruma için tekrar giriş kilidi gibi mekanizmalar kullanılabilir.
Fon hareketlerini içeren kritik fonksiyonlar için, çeşitli sınır durumları ve istisnai senaryoların simülasyonunu da kapsayan kapsamlı bir güvenlik denetimi ve test yapılması önerilir.
Düzenli olarak sözleşme güvenlik kontrolleri yapın, potansiyel açıkları zamanında güncelleyin ve düzeltin.
Bu önlemleri alarak, akıllı sözleşmelerin saldırıya uğrama riskini önemli ölçüde azaltabilir ve projenin genel güvenliğini artırabilirsiniz. Web3 ekosisteminde güvenlik her zaman en önemli hususlardan biridir.
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.
12 Likes
Reward
12
6
Repost
Share
Comment
0/400
GasFeeCrier
· 21h ago
Sözleşme korumasını düzgün yapmıyor musun? Hak ettin!
View OriginalReply0
AirdropBuffet
· 08-12 21:06
Başka bir akıllı sözleşme gitti~
View OriginalReply0
ZenMiner
· 08-12 21:05
Böyle büyük bir açık varken neden beni denetlemeye çağırmadınız?
OrionProtocol yeniden giriş saldırısına uğradı, 2.9 milyon dolar şifreleme varlığı kaybedildi.
OrionProtocol Reentrancy Saldırı Olayı Analizi
2023 yılının 2 Şubat'ında, Ethereum ve Binance Akıllı Zinciri üzerindeki OrionProtocol, sözleşme açığı nedeniyle yeniden giriş saldırısına uğradı ve yaklaşık 2,9 milyon dolar kaybetti. Bu kaybın içinde Ethereum üzerinde 2.844.766 USDT ve Binance Akıllı Zinciri üzerinde 191.606 BUSD bulunmaktadır.
Saldırı Süreci Analizi
Saldırgan öncelikle bir Token sözleşmesi oluşturdu ve ilgili transfer ve yetkilendirme işlemleri gerçekleştirdi, böylece sonraki saldırıya hazırlık yaptı. Ardından, saldırgan UNI-V2'nin swap yöntemini kullanarak borç aldı ve ExchangeWithAtomic sözleşmesinin swapThroughOrionPool yöntemini çağırarak token değişimi yaptı. Değişim yolu USDC → saldırganın oluşturduğu Token → USDT olarak ayarlandı.
Dönüşüm sürecinde, saldırganlar tarafından oluşturulan Token sözleşmesinde geri çağırma işlevi bulunduğundan, ExchangeWithAtomic.swapThroughOrionPool yönteminin yürütülmesi sırasında Token.Transfer aracılığıyla ExchangeWithAtomic.depositAsset yöntemine sürekli geri çağırma gerçekleşmiş ve bu da yeniden giriş saldırısına yol açmıştır. Bu, depozito miktarının sürekli birikmesine neden olmuş ve sonuç olarak saldırgan, para çekme işlemiyle kâr elde etmiştir.
Fon Akışı
Saldırganın başlangıç fonları, bir ticaret platformunun sıcak cüzdan hesabından gelmektedir. Elde edilen 1.651 ETH'nin 657,5'i hala saldırganın cüzdan adresinde bulunuyor, geri kalanı ise karıştırma hizmetleri aracılığıyla transfer edilmiştir.
Açık Analizi
Açığın temel sorunu doSwapThroughOrionPool fonksiyonunda ortaya çıkıyor. Bu fonksiyon, _doSwapTokens fonksiyonunu çağırıyor ve bu fonksiyonda, token transfer işlemi curBalance güncellenmeden önce gerçekleşiyor. Saldırganlar, özelleştirilmiş Token'ın transfer fonksiyonuna eklenen geri çağırma işlevini kullanarak, curBalance güncellenmeden önce depositAsset fonksiyonunu yeniden çağırıyorlar, bu da curBalance'ın yanlış güncellenmesine neden oluyor. Sonuç olarak, saldırganlar, flash loan'ı geri ödedikten sonra, withdraw fonksiyonunu çağırarak fonları çekerek saldırıyı tamamlıyorlar.
Önleme Önerileri
Sözleşme tasarımı sırasında, birden fazla Token ve değişim yollarının olası risklerini dikkate almak gerekir.
"Önce kontrol et, sonra değişkenleri güncelle, en son dış çağrılar yap" kodlama standartlarına (Checks-Effects-Interactions modeli) uymak, sözleşme güvenliğini etkili bir şekilde artırabilir.
Token değişim fonksiyonu uygulanırken, özellikle tekrar giriş saldırısı riskine dikkat edilmesi gerekir; koruma için tekrar giriş kilidi gibi mekanizmalar kullanılabilir.
Fon hareketlerini içeren kritik fonksiyonlar için, çeşitli sınır durumları ve istisnai senaryoların simülasyonunu da kapsayan kapsamlı bir güvenlik denetimi ve test yapılması önerilir.
Düzenli olarak sözleşme güvenlik kontrolleri yapın, potansiyel açıkları zamanında güncelleyin ve düzeltin.
Bu önlemleri alarak, akıllı sözleşmelerin saldırıya uğrama riskini önemli ölçüde azaltabilir ve projenin genel güvenliğini artırabilirsiniz. Web3 ekosisteminde güvenlik her zaman en önemli hususlardan biridir.