Tez No İndirme Tez Künye Durumu
785121
Automated testing for solidity smart contracts / Solidity akıllı sözleşmeleri için otomatik testle
Yazar:SEFA AKCA
Danışman: YRD. DOÇ. DR. AJITHA RAJAN
Yer Bilgisi: The University of Edinburgh / Yurtdışı Enstitü / Bilgisayar ve Enformatik Mühendisliği Ana Bilim Dalı
Konu:Bilgisayar Mühendisliği Bilimleri-Bilgisayar ve Kontrol = Computer Engineering and Computer Science and Control
Dizin:Bilgisayar yazılım dilleri = Computer software languages ; Bilgisayar yazılımları = Computer softwares
Onaylandı
Doktora
İngilizce
2022
131 s.
Blok zincirleri, Bitcoin ve Ether gibi kripto para birimlerini kullanarak güvenli çevrimiçi işlemler yapmak için temel teknolojidir. İzinsiz blok zincirlerinde güvenilir işlemlerin yürütülmesi, doğrulanması ve uygulanması akıllı sözleşmeler kullanılarak yapılır. Akıllı sözleşmeler, Ethereum ağı üzerinde çalışan ve Solidity dili tarafından uygulanabilen, halka açık programlardır. Solidity, akıllı sözleşmeleri uygulamak için en popüler programlama dilidir. Akıllı sözleşmeler, üçüncü taraf yüklenicilerle ilişkili işlem maliyetlerini azaltırken şeffaf, çatışmasız bir şekilde para, mülk, hisse veya değerli herhangi bir şeyin değiş tokuşuna yardımcı olur. Akıllı sözleşmeler geliştirmedeki en büyük zorluk, bunların doğru olmasını ve güvenlik zayıflıklarından arınmış olmasını garanti etmektir, çünkü bunların uygulanmasındaki hatalar önemli mali kayıplara neden olabilir. Örneğin, BeautyChain (BECToken) sözleşmesindeki tamsayı taşması güvenlik açığını tetikleyen tek bir satır, yaklaşık 12 milyon dolar değerinde çok sayıda token çalınmasına neden oldu. Son birkaç yılda, akıllı sözleşmelerin analizi ve test edilmesi büyük ilgi uyandırdı ve çok sayıda teknik geliştirildi ve akıllı sözleşmelerdeki güvenlik açıklarının varlığını kontrol etmeyi önerdi. Ancak, akıllı sözleşmelerin güvenliği ve doğruluğu, yüksek yanlış pozitif oranı, yol patlaması ve Solidity yapıları için destek eksikliği gibi önerilen tekniklerdeki sorunlar nedeniyle akademi ve endüstride hala büyük bir sorudur. Bu tez, Solidity akıllı sözleşmeleri için otomatikleştirilmiş test girdisi üretimi ve test etkinliği ölçümü için yeni yaklaşımlar sunar. Bunu başarmak için, akıllı sözleşme yürütmeyle ilgili önemli zorlukları, yani Solidity diline özgü verileri, özellikleri ve güvenlik açığı tespitinin kapsamını ele alıyoruz. Tez, otomatik test içinde aşağıdaki dört katkıyı sağlar. İlk olarak, herhangi bir uzman Solidity programlaması gerektirmeyen önceden tanımlanmış yardımcı işlevleri kullanarak bir analiz, enstrümantasyon, optimizasyon ve kod oluşturma çerçevesi (SIF) öneriyoruz. Bu çerçeve, Solidity kodunu kolayca ve etkili bir şekilde anlamak, işlemek ve analiz etmek için bir arayüz sağlama yeteneğine sahiptir. İkinci olarak, Solidity akıllı sözleşmeleri üzerindeki güvenlik açıklarını tespit etmek için otomatikleştirilmiş bir çerçeve olan SolAnalyser sunuyoruz. Çerçevemiz, sözleşmedeki her aritmetik işlem için ön ve son koşullar olarak ilgili iddia ifadelerini otomatik olarak ekler. Ardından, çıktı olarak ilgili özellik iddialarıyla akıllı bir sözleşme oluşturur. Son olarak, çerçevemiz, otomatik olarak oluşturulan test girdileriyle (Katkı 3'ten) özellik iddialarıyla oluşturulan akıllı sözleşmeyi yürütür ve varsa güvenlik açıklarını bildirir. Üçüncüsü, Solidity akıllı sözleşmeleri için farklı test girdisi oluşturma teknikleri uyguluyoruz. Uyguladığımız teknikler bulanıklaştırma, genetik algoritma (GA) ve tatmin edici modül teorileri (SMT) çözücüye dayanmaktadır. Bulanıklaştırma, sözleşme arayüzüne bağlı olarak rastgele girdi üretimine dayanır. Genetik algoritma girdi üretmek için doğal evrimi taklit eder. SMT çözücü, pratik bir girdi alt kümesi için verilen kısıtlamaları çözmeyi amaçlar. Dördüncü katkı olarak, farklı test girdi oluşturma tekniklerinin etkinliğini değerlendirmek için bir çerçeve olan CovCal'ı uyguluyoruz. CovCal, bunları Solidity yapısına özgü farklı kapsama metriklerine ve hata bulma yeteneğine göre analiz eder. SIF, SolAnalyser ve CovCal gibi çerçevelerimizi ve test tekniklerini, 1755 akıllı sözleşme ve çok çeşitli Solidity yapıları içeren farklı akıllı sözleşme veri kümeleri altında değerlendirdik. Bu deneylerden şu sonuçları çıkardık: (1) SIF, Solidity kodunu doğru bir şekilde enstrümanlayarak tüm Solidity yapılarını destekleyebilir ve kullanıcı dostudur. (2) SolAnalyser, tanımlanmış güvenlik açığı türlerini tespit etme yeteneğine sahiptir. (3) CovCal, Solidity akıllı sözleşmelerinde kod kapsamı ve hata bulma yeteneği açısından test girdilerinin etkinliğini otomatik olarak ölçebilir. (4) Bu tekniklerin tümü, Solidity akıllı sözleşmeleri için geçerli test girdileri oluşturabilir ve test edilen sözleşmelerdeki güvenlik açıklarını tespit edebilir. Tüm bu uygulamalar ve değerlendirmeler açık kaynaklıdır ve diğer araştırma grupları tarafından kullanılmıştır.
Blockchains are the underlying technology for making secure online transactions using cryptocurrencies such as Bitcoins and Ethers. Executing, verifying, and enforcing credible transactions on permissionless blockchains is done using smart contracts. Smart contracts are publicly available programs that run on the Ethereum network and can be implemented by Solidity language. Solidity is the most popular programming language to implement smart contracts. Smart contracts help exchange money, property, shares or anything of value in a transparent, conflict-free way while reducing transaction costs associated with third-party contractors. A major challenge in developing smart contracts is to guarantee that they are correct and free of security weaknesses, since bugs in their implementation may result in significant financial losses. For example, a single line that triggered integer overflow vulnerability in the BeautyChain (BECToken) contract caused a large number of stolen tokens - worth approximately $12 million. In the last few years, analysis and testing of smart contracts have raised considerable interest, and numerous techniques have been proposed to check the presence of vulnerabilities in them. However, the security and correctness of smart contracts is still a big question in academia and industry because of the problems in proposed techniques such as high false-positive rate, path explosion, and lack of support for Solidity constructs. This thesis presents novel approaches for automated test input generation and test effectiveness measurement for Solidity smart contracts. To achieve this, we address significant challenges related to smart contract execution, namely Solidity language-specific data and features, and the extent of vulnerability detection. The thesis makes the following four contributions within automated testing. First, we propose an analysis, instrumentation, optimisation and code generation framework, SIF, using pre-defined helper functions that do not require any expert Solidity programming. This framework is capable of providing an interface to easily and effectively understand, manipulate and analyse Solidity code. Second, we present an automated framework, SolAnalyser, for detecting vulnerabilities over Solidity smart contracts. Our framework automatically inserts relevant assert statements as pre and post conditions for each arithmetic operation in the contract. Then, it generates a smart contract with relevant property assertions as output. Finally, our framework executes the generated smart contract with property assertions with automatically generated test inputs (from Contribution 3), and reports vulnerabilities, if any. Third, we implement different test input generation techniques for Solidity smart contracts. The techniques we implemented are based on fuzzing, genetic algorithm (GA), and satisfiability modulo theories (SMT) solver. Fuzzing relies on random input generation depending on contract interface. GA imitates the natural evolution to produce test input. SMT solver aims to solve given constraints for a practical subset of inputs. As the fourth contribution, we implement a framework, CovCal, to evaluate the effectiveness of different test input generation techniques. CovCal analyses them with respect to different coverage metrics, which are specific to Solidity structure, and fault-finding ability. We evaluate our frameworks, i.e., SIF, SolAnalyser and CovCal, and the testing techniques under different smart contract datasets that contain 1755 smart contracts and a wide variety of the Solidity constructs. We can infer the following from these experiments: (1) SIF is capable of supporting all the Solidity constructs, correctly instrumenting the Solidity code, and is user-friendly. (2) SolAnalyser is capable of detecting defined vulnerability types. (3) CovCal is capable of measuring the effectiveness of the test inputs automatically, in terms of code coverage and fault-finding capability in the Solidity smart contracts. (4) All of these techniques are able to generate valid test inputs for the Solidity smart contracts and detect any vulnerabilities in the tested contracts. All of these implementations and evaluations are open-sourced and have been used by other research groups.