Akıllı sözleşme güvenlik araçlarına yönelik bir kılavuz
Üç farklı test ve program analizi tekniği kullanacağız:
- Slither ile statik analiz. Programın tüm yolları, farklı program gösterimleri (örn. kontrol akış grafiği) aracılığıyla aynı anda tahmin edilir ve analiz edilir.
- Echidna ile Bulandırma. Kod, sahte rastgele işlem üretimi ile yürütülür. Bulandırıcı, belirli bir özelliği ihlal etmek için bir dizi işlem bulmaya çalışacaktır.
- Manticore ile sembolik yürütme. Her yürütme yolunu, üzerinde kısıtlamaların kontrol edilebildiği matematiksel bir formüle çeviren resmi bir doğrulama tekniğidir.
Her tekniğin avantajları ve zorlukları vardır ve belirli durumlarda faydalı olacaktır:
| Teknik | Araç | Kullanım | Hız | Gözden kaçan hatalar | Yanlış Alarmlar |
|---|---|---|---|---|---|
| Statik Analiz | Slither | CLI ve komut dosyaları | saniyeler | Orta | Düşük |
| Bulandırma | Echidna | Solidity özellikleri | dakika | Düşük | Yok |
| Sembolik Yürütme | Manticore | Solidity özellikleri ve komut dosyaları | saat | Yok* | Yok |
* tüm yollar zaman aşımı olmadan araştırılırsa
Slither sözleşmeleri saniyeler içinde analiz eder ancak statik analiz yanlış alarmlara neden olabilir ve karmaşık kontroller (örn. aritmetik kontroller) için daha az uygun olacaktır. Yerleşik algılayıcılara tek tuşla erişim için API aracılığıyla veya kullanıcı tanımlı kontroller için API aracılığıyla Slither'ı çalıştırın.
Echidna'nın birkaç dakika çalışması gerekir ve yalnızca doğru pozitifler üretecektir. Echidna, Solidity dilinde yazılmış, kullanıcı tarafından sağlanan güvenlik özelliklerini kontrol eder. Rastgele keşfe dayalı olduğu için hataları gözden kaçırabilir.
Manticore "en ağır" analizi gerçekleştirir. Echidna gibi, Manticore da kullanıcı tarafından sağlanan özellikleri doğrular. Çalışması daha fazla zaman alacaktır, ancak bir özelliğin geçerliliğini kanıtlayabilir ve yanlış alarmlar bildirmez.
Önerilen iş akışı
Mevcut veya gelecekte eklenebilecek basit hataların olmadığından emin olmak için Slither'ın yerleşik algılayıcılarıyla başlayın. Kalıtım, değişken bağımlılıkları ve yapısal sorunlarla ilgili özellikleri kontrol etmek için Slither'ı kullanın. Kod tabanı büyüdükçe, durum makinesinin daha karmaşık özelliklerini test etmek için Echidna'yı kullanın. Bir fonksiyonun geçersiz kılınmasına karşı koruma gibi Solidity'de mevcut olmayan korumalar için özel denetimler geliştirmek üzere Slither'a geri dönün. Son olarak, aritmetik işlemler gibi kritik güvenlik özelliklerinin hedeflenmiş doğrulamasını gerçekleştirmek için Manticore'u kullanın.
- Sık karşılaşılan sorunları yakalamak için Slither'ın CLI'ını kullanın
- Sözleşmenizin üst düzey güvenlik özelliklerini test etmek için Echidna'yı kullanın
- Özel statik denetimler yazmak için Slither'ı kullanın
- Kritik güvenlik özelliklerinin derinlemesine güvencesini istediğinizde Manticore'u kullanın
Birim testleri üzerine bir not. Yüksek kaliteli yazılım oluşturmak için birim testleri gereklidir. Ancak bu teknikler, güvenlik kusurlarını bulmak için en uygun olanlar değildir. Bunlar genellikle kodun pozitif davranışlarını test etmek için kullanılır (yani kod normal bağlamda beklendiği gibi çalışır), güvenlik kusurları ise geliştiricilerin dikkate almadığı uç durumlarda bulunma eğilimindedir. Onlarca akıllı sözleşme güvenlik incelemesi üzerine yaptığımız çalışmada, müşterimizin kodunda bulduğumuz güvenlik kusurlarının sayısı veya ciddiyeti üzerinde birim testi kapsamının hiçbir etkisi olmamıştır (opens in a new tab).
Güvenlik Özelliklerini Belirleme
Kodunuzu etkili bir şekilde test etmek ve doğrulamak için dikkat gerektiren alanları belirlemeniz gerekir. Güvenliğe ayırdığınız kaynaklar sınırlı olduğundan, çabanızı en iyi duruma getirmek için kod tabanınızın zayıf veya değerli kısımlarını belirlemek önemlidir. Tehdit modellemesi yardımcı olabilir. Şunları gözden geçirmeyi düşünün:
- Hızlı Risk Değerlendirmeleri (opens in a new tab) (zaman kısıtlı olduğunda tercih ettiğimiz yaklaşım)
- Veri Merkezli Sistem Tehdit Modelleme Rehberi (opens in a new tab) (diğer adıyla NIST 800-154)
- Shostack tehdit modellemesi (opens in a new tab)
- STRIDE (opens in a new tab) / DREAD (opens in a new tab)
- PASTA (opens in a new tab)
- Onaylamaların Kullanımı (opens in a new tab)
Bileşenler
Neyi denetlemek istediğinizi bilmek, doğru aracı seçmenize de yardımcı olacaktır.
Akıllı sözleşmeler için sıklıkla geçerli olan geniş alanlar şunları içerir:
-
Durum makinesi. Çoğu sözleşme bir durum makinesi olarak temsil edilebilir. Şunları kontrol etmeyi düşünün: (1) Hiçbir geçersiz duruma ulaşılamayacağı, (2) geçerli bir duruma ulaşılabileceği ve (3) hiçbir durumun sözleşmeyi tuzağa düşürmediği.
- Echidna ve Manticore, durum makinesi belirtimlerini test etmek için tercih edilecek araçlardır.
-
Erişim denetimleri. Sisteminizde ayrıcalıklı kullanıcılar (ör. bir sahip, denetleyiciler, ...) varsa her kullanıcının yalnızca izin verilen eylemleri gerçekleştirebildiğinden ve (2) hiçbir kullanıcının daha ayrıcalıklı bir kullanıcının eylemlerini engelleyemediğinden emin olmalısınız.
- Slither, Echidna ve Manticore, erişim denetimlerinin doğruluğunu kontrol edebilir. Örneğin Slither, yalnızca beyaz listeye alınmış işlevlerde
onlyOwnerniteleyicisinin eksik olduğunu kontrol edebilir. Echidna ve Manticore, yalnızca sözleşme belirli bir duruma ulaştığında verilen bir izin gibi daha karmaşık erişim denetimleri için kullanışlıdır.
- Slither, Echidna ve Manticore, erişim denetimlerinin doğruluğunu kontrol edebilir. Örneğin Slither, yalnızca beyaz listeye alınmış işlevlerde
-
Aritmetik işlemler. Aritmetik işlemlerin sağlamlığını kontrol etmek kritik öneme sahiptir. Her yerde
SafeMathkullanmak, taşma/alt taşmayı önlemek için iyi bir adımdır ancak yuvarlama sorunları ve sözleşmeyi tuzağa düşüren kusurlar da dahil olmak üzere diğer aritmetik kusurları yine de göz önünde bulundurmalısınız.- Burada en iyi seçim Manticore'dur. Aritmetik, SMT çözücünün kapsamı dışındaysa Echidna kullanılabilir.
-
Kalıtım doğruluğu. Solidity sözleşmeleri büyük ölçüde çoklu kalıtıma dayanır.
superçağrısı eksik olan bir gölgeleme işlevi ve yanlış yorumlanmış C3 doğrusallaştırma sırası gibi hatalar kolayca yapılabilir.- Slither bu sorunların tespit edilmesini sağlayan araçtır.
-
Harici etkileşimler. Sözleşmeler birbirleriyle etkileşime girer ve bazı harici sözleşmelere güvenilmemelidir. Örneğin, sözleşmeniz harici kâhinlere dayanıyorsa, mevcut kâhinlerin yarısı tehlikeye atıldığında güvende kalır mı?
- Manticore ve Echidna, sözleşmelerinizle olan harici etkileşimleri test etmek için en iyi seçimdir. Manticore, harici sözleşmeleri taklit etmek için yerleşik bir mekanizmaya sahiptir.
-
Standartlara uygunluk. Ethereum standartlarının (ör. ERC20) tasarımlarında geçmişten gelen kusurlar vardır. Üzerine inşa ettiğiniz standardın sınırlılıklarının farkında olun.
- Slither, Echidna ve Manticore, belirli bir standarttan sapmaları tespit etmenize yardımcı olacaktır.
Araç seçim rehberi
| Bileşen | Araçlar | Örnekler |
|---|---|---|
| Durum makinesi | Echidna, Manticore | |
| Erişim denetimi | Slither, Echidna, Manticore | Slither alıştırma 2 (opens in a new tab), Echidna alıştırma 2 (opens in a new tab) |
| Aritmetik işlemler | Manticore, Echidna | Echidna alıştırma 1 (opens in a new tab), Manticore alıştırmaları 1 - 3 (opens in a new tab) |
| Kalıtım doğruluğu | Slither | Slither alıştırma 1 (opens in a new tab) |
| Harici etkileşimler | Manticore, Echidna | |
| Standartlara uygunluk | Slither, Echidna, Manticore | slither-erc (opens in a new tab) |
Hedeflerinize bağlı olarak diğer alanların da denetlenmesi gerekecektir, ancak bu genel odak alanları herhangi bir akıllı sözleşme sistemi için iyi bir başlangıçtır.
Halka açık denetimlerimiz, doğrulanmış veya test edilmiş özelliklerin örneklerini içerir. Gerçek dünyadaki güvenlik özelliklerini gözden geçirmek için aşağıdaki raporların Otomatik Test ve Doğrulama bölümlerini okumayı düşünün:
Sayfanın son güncellenmesi: 22 Ekim 2025