Professional Documents
Culture Documents
Bản Dịch Mutation - testing - for - integer - overflow - in - ethereum - smart - contracts
Bản Dịch Mutation - testing - for - integer - overflow - in - ethereum - smart - contracts
Thử nghiệm đột biến cho tràn số nguyên trong hợp đồng thông minh Ethereum
Jinlei Sun, Song Huang , Changyou Zheng , Tingyong Wang, Cheng Zong và Zhanwei Hui
Tóm tắt: Tràn số nguyên là một lỗ hổng phổ biến trong Hợp đồng thông minh Ethereum (ESC) và thường gây ra thiệt hại lớn
Thiệt hại kinh tế. Hợp đồng thông minh không thể thay đổi sau khi nó được triển khai trên chuỗi khối và do đó yêu cầu
Thử nghiệm thêm. Kiểm thử đột biến là một phương pháp kiểm thử dựa trên lỗi có thể cải thiện hiệu quả tính đầy đủ của kiểm thử
cho các hợp đồng thông minh. Tuy nhiên, các phương pháp hiện tại không thể thực hiện kiểm tra đột biến một cách hiệu quả dành riêng cho số nguyên
tràn trong ESC. Do đó, bằng cách phân tích tràn số nguyên trong ESC, chúng tôi đề xuất năm toán tử đột biến đặc biệt để
giải quyết lỗ hổng đó về mặt phát hiện đầy đủ trong thử nghiệm ESC. Một nghiên cứu thực nghiệm trên 40 mã nguồn mở
ESC được tiến hành để đánh giá hiệu quả của các toán tử đột biến được đề xuất. Kết quả cho thấy (1) của chúng tôi
toán tử đột biến được đề xuất có thể tái tạo tất cả 179 lỗ hổng tràn số nguyên trong 40 hợp đồng thông minh và
các đột biến được tạo có tỷ lệ vượt qua biên dịch cao và tỷ lệ tạo lỗ hổng tràn số nguyên; Hơn thế nữa,
(2) các đột biến được tạo ra có thể tìm thấy những thiếu sót của các phương pháp thử nghiệm hiện tại đối với lỗ hổng tràn số nguyên,
từ đó hỗ trợ đắc lực để nâng cao tính đầy đủ của bài thi.
Từ khóa: chuỗi khối; Hợp đồng thông minh Ethereum (ESC); tràn số nguyên; thử nghiệm đột biến
1. Giới thiệu Lập trình viên có thể tạo hợp đồng thông minh trên Ethereum.
Hợp đồng thông minh Ethereum (ESC) là một chương trình được
Chuỗi khối là sổ cái chia sẻ phi tập trung kết hợp các khối
triển khai trên chuỗi khối Ethereum, chứa các trạng thái
dữ liệu thành một cấu trúc dữ liệu cụ thể theo trình tự
được xác định trước, quy tắc chuyển đổi, điều kiện thực
thời gian và sử dụng các phương pháp mã hóa để đảm bảo rằng
hiện và logic thực thi. Khi các điều kiện thực thi được
dữ liệu không thể bị giả mạo hoặc giả mạo. Sự xuất hiện đầu
đáp ứng, logic thực thi sẽ tự động được thực hiện.
tiên của chuỗi khối là trong Bitcoin do Nakamoto đề xuất
Hợp đồng thông minh mở rộng khả năng xử lý dữ liệu của
[1]. Trong những năm gần đây, khái niệm chuỗi khối ngày
chuỗi khối. Nhiều hợp đồng thông minh được triển khai trên
càng trở nên phổ biến. Đồng thời, Ethereum[2] đã được sử
Ethereum, do đó đòi hỏi các yêu cầu cao hơn về bảo mật.
dụng rộng rãi hơn trong nhiều lĩnh vực khác nhau, chẳng
Theo nghiên cứu của Nikolic[4], 3686 trong số 3759 hợp đồng
hạn như “Blockchain 2.0”.
thông minh có xác suất chứa lỗ hổng bảo mật là 89%. Nhiều
Ethereum là một chuỗi khối cung cấp ngôn ngữ lập trình
sự cố bảo mật hợp đồng thông minh nghiêm trọng đã xảy ra
hoàn chỉnh Turing, chẳng hạn như Solidity[3] .
trong thế giới thực. Ví dụ, lỗ hổng bảo mật nổi tiếng
học Kỹ thuật Lục quân PLA, Nam Kinh 210000, Trung Quốc. E- ký Parity[6] đã dẫn đến thiệt hại 30 triệu đô la và 152
mail: jinleisun@yeah.net; hs0317@163.com; zheng chy@163.com; triệu đô la. Vào tháng 4 năm 2018, mã thông báo BEC[7] đã
15061284014@163.com; tông thành @
bị đánh cắp và giá trị thị trường 900 triệu đô la của nó
cnnp.com.cn.
gần như giảm xuống 0 do tràn số nguyên. Xét rằng ESC có
Zhanwei Hui cùng với Viện Đánh giá và Đánh giá
thể liên quan đến một số tiền lớn, một lỗ hổng trong một
Nghiên cứu, Học viện Khoa học Quân sự, Bắc Kinh 100091, Trung Quốc.
E-mail: hzw 1983821@163.com. dòng mã nhỏ cũng có thể gây ra tổn thất lớn.
C (Các) tác giả năm 2022. Các bài báo được xuất bản trên tạp chí truy cập mở này được phân phối theo các điều
khoản của Giấy phép Quốc tế Creative Commons Attribution 4.0 (http://creativecommons.org/licenses/by/4.0/).
Machine Translated by Google
28 Khoa học và Công nghệ Thanh Hoa, tháng 2 năm 2022, 27(1): 27–
40
Tràn số nguyên là một lỗ hổng phổ biến trong ESC. Kalra và Những đóng góp chính của nghiên cứu này như sau:
cộng sự[8] cho thấy 1095 trong số 1564 hợp đồng thông minh Chúng tôi phân tích các lỗ hổng tràn số nguyên tồn tại trong
chứa lỗ hổng tràn số nguyên. Hiện tượng này xảy ra vì hai lý hợp đồng thông minh và đề xuất năm toán tử đột biến đặc biệt cho
do. Mặt khác , Máy ảo Ethereum (EVM) chỉ có số nguyên 256 lỗi tràn số nguyên trong ESC.
bit, trong khi Solidity có nhiều loại số nguyên (số nguyên 8 Dựa trên các toán tử đột biến được đề xuất, chúng tôi triển
bit và 16 bit). Do đó, các số nguyên từ các loại Solidity đến khai một công cụ đột biến tràn số nguyên để có thể thực hiện tự
EVM không được ánh xạ chặt chẽ. Mặt khác, Solidity và EVM động việc tiêm đột biến cho tràn số nguyên.
xảy ra tràn số nguyên, chương trình không chủ động ném ngoại Chúng tôi thu thập và gắn nhãn 40 hợp đồng thông minh
lệ mà tiếp tục thực thi đoạn mã tiếp theo. nguồn mở có lỗ hổng tràn số nguyên, tạo ra 2099 đột biến và
tiến hành nghiên cứu thực nghiệm về chúng. Kết quả cho thấy
rằng các nhà khai thác của chúng tôi không chỉ có thể tạo ra
Do đó, việc kiểm tra lỗi tràn số nguyên trong hợp đồng thông minh các đột biến hữu ích mà còn cung cấp hỗ trợ hiệu quả để cải
là đặc biệt quan trọng. thiện tính đầy đủ của thử nghiệm ESC. Công cụ và dữ liệu trên
Hiện tại, nghiên cứu về kiểm tra lỗ hổng tràn số nguyên có sẵn tại GitHub[10] .
chủ yếu tập trung vào cách phát hiện lỗ hổng trong hợp đồng Phần còn lại của bài viết này được tổ chức như sau: Phần 2
thông minh[8]; tuy nhiên, nghiên cứu đánh giá công nghệ thử cung cấp thông tin cơ bản về ESC và thử nghiệm đột biến và
nghiệm hợp đồng thông minh vẫn chưa hoàn hảo. Một mặt, hầu mô tả các lỗ hổng tràn số nguyên chính trong ESC. Phần 3 cung
hết các ESC tồn tại ở dạng mã byte; do đó, số lượng mã nguồn cấp công việc liên quan và Phần 4 mô tả các toán tử đột biến
hợp đồng thông minh có thể được sử dụng để thử nghiệm và đánh của chúng tôi trong thử nghiệm đột biến ESC. Phần 5 trình bày
giá trong thực tế là hạn chế. Mặt khác, việc gắn nhãn các lỗ thiết kế và phân tích của nghiên cứu thực nghiệm được tiến
hổng số nguyên theo cách thủ công trong hợp đồng thông minh hành. Phần 6 cung cấp các mối đe dọa đối với tính hợp lệ.
hiện tại rất tốn công sức. Tuy nhiên, thử nghiệm đột biến có Phần 7 kết thúc nghiên cứu và trình bày các kế hoạch cho công
thể làm giảm bớt hai tình huống trên một cách hiệu quả. Một việc trong tương lai.
số nhà nghiên cứu [9] cũng đã đề xuất sử dụng thử nghiệm đột
biến để đánh giá các kỹ thuật thử nghiệm và trường hợp thử 2 bối cảnh
nghiệm. Tuy nhiên, không có dấu hiệu hoàn hảo nào tồn tại 2.1 Hợp đồng thông minh Ethereum
đối với các toán tử đột biến tràn số nguyên. Trên cơ sở đó,
Hợp đồng thông minh, được đề xuất bởi Szabo[11] vào năm 1996,
nghiên cứu này phân tích các lỗ hổng tràn số nguyên trong hợp
gói gọn các trạng thái và quy tắc chuyển đổi được xác định
đồng thông minh Solidity được sử dụng rộng rãi nhất trong
trước, đồng thời kích hoạt các kịch bản thực hiện hợp đồng
Ethereum và đề xuất năm toán tử đột biến. Đầu tiên, chúng
và hoạt động phản hồi trong các tình huống cụ thể. Khi các
tôi tóm tắt ba loại lỗi tràn số nguyên tồn tại trong hợp đồng
điều kiện thực thi được thỏa mãn, các hợp đồng thông minh sẽ
thông minh: số học, cắt ngắn và tràn số đã ký. Thứ hai, năm
tự động được thực thi và kết quả thực thi được tạo ra theo
toán tử đột biến đặc biệt được đề xuất cho ba loại lỗi số
mã trong hợp đồng.
nguyên ở trên. Các toán tử này bao gồm các toán tử đột biến
Chuỗi khối phù hợp với các hợp đồng thông minh do tính phi
đã tồn tại trong các thử nghiệm đột biến truyền thống và
tập trung, tính bất biến và khả năng truy xuất nguồn gốc của nó.
những toán tử được đề xuất trong nghiên cứu này.
Hiện tại, nhiều hệ thống chuỗi khối (chẳng hạn như Bitcoin[1]
Một nghiên cứu thực nghiệm đã được tiến hành trên 40 ESC Với một ngôn ngữ lập trình hoàn chỉnh và một loạt các công cụ xây
mã nguồn mở . Kết quả cho thấy (1) các toán tử đột biến được dựng phức tạp, Ethereum đã trở thành một nền tảng blockchain hấp
đề xuất của chúng tôi có thể tái tạo tất cả 179 lỗ hổng tràn dẫn để xây dựng các ứng dụng phi tập trung khác nhau.
số nguyên trong 40 hợp đồng thông minh ban đầu và các đột
biến được tạo có tỷ lệ vượt qua biên dịch và tỷ lệ tạo lỗ Chuỗi khối Ethereum có hai loại tài khoản: bên ngoài và
hợp đồng. Tài khoản bên ngoài được tạo
hổng tràn số nguyên cao; hơn nữa, (2) các đột biến do toán tử
đột biến tạo ra có thể tìm ra những thiếu sót của các phương bởi các cá nhân và được kiểm soát bởi khóa bí mật, trong khi
pháp kiểm tra hiện tại đối với lỗ hổng tràn số nguyên, do đó tài khoản hợp đồng được tạo khi hợp đồng được triển khai và
cung cấp hỗ trợ hiệu quả để cải thiện tính đầy đủ của kiểm chủ yếu được kiểm soát bởi mã hợp đồng. Tài khoản bên ngoài
tra. và hợp đồng có thể thực hiện các hoạt động, chẳng hạn như
Machine Translated by Google
Jinlei Sun và cộng sự: Thử nghiệm đột biến cho tràn số nguyên trong hợp đồng thông minh Ethereum 29
chuyển Ether và gọi hợp đồng, bằng cách gửi các giao dịch được sử dụng rộng rãi trong nghiên cứu kiểm thử phần mềm truyền thống[16] .
theo địa chỉ hợp đồng. ESC thường dễ bị tổn thương và khó sửa đổi sau khi triển
Hiện tại, ngôn ngữ lập trình hợp đồng thông minh phổ khai. Do đó, cần phải thử nghiệm thêm trước khi ESC được
biến nhất trong Ethereum là Solidity; do đó, đối tượng triển khai trên chuỗi. Hơn nữa, thử nghiệm đột biến có thể
nghiên cứu của nghiên cứu này là ESC được viết bằng là một kỹ thuật hiệu quả trong việc thúc đẩy chất lượng của
Solidity. Solidity là một ngôn ngữ hoàn chỉnh Turing tương thử nghiệm ESC.
hợp đồng không thể được sửa chữa bằng cách vá. Tràn số học là loại lỗ hổng tràn số nguyên phổ biến nhất.
Nguyên nhân chủ yếu là do không kiểm tra ranh giới khi thực
hiện các phép toán số học, có thể được chia thành tràn và
2.2 Thử nghiệm đột biến
tràn.
Kiểm thử đột biến là một kỹ thuật kiểm thử phần mềm dựa
trên lỗi [12]. Hai giả định được đưa ra trong thử nghiệm
Tràn xảy ra khi việc gán một biến số nguyên
đột biến: giả thuyết về lập trình viên có thẩm quyền[13]
vượt quá giới hạn trên của nó. Ví dụ: trong đoạn
và hiệu ứng khớp nối[14] . Cái trước có nghĩa là lập trình
mã tràn SWC-101 được hiển thị trong Hình 2, số
viên mã hóa tốt nhất có thể và sản phẩm mã hóa gần đúng.
dư biến là một số nguyên không dấu 256 bit. Khi
Điều đó có nghĩa là các lỗ hổng trong mã rất tinh vi và do
tiền gửi giá trị đầu vào lớn và tổng của số dư
đó thử nghiệm đột biến có thể mô phỏng các lỗ hổng mã hóa
lớn hơn 2256, nó sẽ khiến số dư bị tràn và trở
bằng cách thay đổi một phần nhỏ của mã. Cái sau giả định
thành một giá trị tương đối nhỏ.
rằng các lỗ hổng phức tạp được xếp chồng lên nhau bởi các
Khi việc gán một biến số nguyên vượt quá giới hạn dưới
lỗ hổng đơn giản và có thể tìm thấy các lỗ hổng phức tạp
của phạm vi biểu diễn của nó, thì xảy ra tràn dưới. Toán tử
bằng cách phát hiện các lỗ hổng đơn giản; nghĩa là, chỉ có
số học chính gây ra dòng chảy tràn là phép trừ. Ví dụ:
một lỗ hổng duy nhất trong các dị nhân là có ý nghĩa. Quy
trong đoạn mã dòng dưới SWC 101 được hiển thị trong Hình
trình thử nghiệm đột biến cho hợp đồng thông minh được hiển
3, số đếm là
thị trong Hình 1.
thử hoặc các kỹ thuật kiểm thử, chẳng hạn như kiểm thử mờ [15], và đã được 3 năng thêm (tiền gửi uint256 ) số dư f
5 g
6g _
5 g
6g _
Hình 1 Quy trình kiểm tra đột biến. Hình 3 Đoạn mã chảy tràn SWC-101.
Machine Translated by Google
30 Khoa học và Công nghệ Thanh Hoa, tháng 2 năm 2022, 27(1): 27–
40
một số nguyên không dấu 256-bit. Khi giá trị đầu vào lịch sử hơn 40 năm. Kiểm thử đột biến được sử dụng trong các
đầu vào lớn hơn số đếm, nó sẽ khiến số đếm bị tràn và loại kiểm thử phần mềm khác nhau, chẳng hạn như Java[21] ,
trở thành một giá trị tương đối lớn. C#[22], và C++[23] trong các ngôn ngữ hướng đối tượng[24–
2.3.2 Tràn cắt ngắn 26]; Haskel[27] trong các ngôn ngữ lập trình chức năng[28];
.
và di động[29, 30] và thử nghiệm ứng dụng web[31, 32]
Các số nguyên trong Solidity nằm trong khoảng từ 8 đến 256 bit
Wu và cộng sự.[9] lần đầu tiên giới thiệu thử nghiệm đột biến
và tăng theo gia số 8 bit. Việc gán một số nguyên có độ rộng
để thử nghiệm hợp đồng thông minh . Mười lăm toán tử đột biến
bit nhỏ cho một số nguyên có độ rộng lớn không gây tràn; ngược
mới được thiết kế cho ESC và công cụ kiểm tra đột biến,
lại, việc gán một số nguyên có độ rộng bit lớn cho một số nguyên
MuSC[33], đã được triển khai. Hartel và Schumi [34] đã thực
có độ rộng bit nhỏ dẫn đến việc cắt ngắn và giá trị nhỏ hơn. Ví
hiện thử nghiệm đột biến trên một hợp đồng trò chơi trực tuyến
dụ: trong đoạn mã sau trong Hình 4, lỗi tràn do cắt bớt xảy ra
và đề xuất một toán tử đột biến Mothra tiêu chuẩn và bốn toán
khi msg.value, ban đầu là uint256, bị cắt bớt thành uint64 ở
tử đột biến dành riêng cho Solidity. Kết quả cho thấy các toán
Dòng 3, dẫn đến số dư[msg.sender] nhỏ hơn nhiều so với msg.value .
tử đột biến đặc biệt hiệu quả hơn tiêu chuẩn.
Trong Tài liệu tham khảo [35], 10 loại toán tử đột biến đã được
đề xuất cho ESC và các toán tử này được triển khai trên cơ sở
2.3.3 Tràn có dấu Tràn có
của UniversalMutator.
dấu xảy ra do sự khác biệt giữa kiểu biến đích và kiểu giá trị
3.2 Thử nghiệm hợp đồng thông minh
được gán, bao gồm hai trường hợp. Một là chuyển đổi số nguyên
có dấu thành số nguyên không dấu. Bit cao nhất của một số nguyên Oyente[36] là một trong những công cụ phân tích hợp đồng thông
có dấu là bit dấu. Nếu một số có dấu được gán cho một số nguyên minh sớm nhất. Nó thực hiện việc thực thi các hợp đồng thông
không dấu có cùng kích thước, nó sẽ tràn sang một số dương lớn minh một cách tượng trưng ở cấp mã byte. Dựa trên Oyente,
hơn. Một số khác bị tràn khi chuyển đổi số nguyên không dấu Osiris[37] đã tiến hành nghiên cứu về lỗ hổng tràn số nguyên
thành số nguyên có dấu. Nếu một số nguyên không dấu lớn hơn trong hợp đồng thông minh và sử dụng công nghệ thực thi ký hiệu
được gán cho một số nguyên có dấu có cùng độ dài, thì số đó có để phát hiện ba loại tràn số nguyên. Maian[4] có thể tìm các
thể bị chuyển thành số âm và gây ra lỗi. Trong đoạn mã sau ở ESC tự hủy và rút tiền từ bất kỳ địa chỉ nào và phát hiện các
Hình 5, giá trị tham số đầu vào của hàm trasferFrom thuộc loại ESC không có chức năng thanh toán.
int, được chuyển đổi thành uint trong lần sử dụng tiếp theo và Một số nghiên cứu đã phân tích hợp đồng thông minh từ góc độ
có thể khiến cho số dư[ thành] thêm một giá trị lớn hơn và gây xác minh chính thức. Bhargavan và cộng sự[38] đã sử dụng ngôn
ra lỗ hổng bảo mật. ngữ chức năng F* để phân tích SMT và đề xuất các công cụ phân
hình Ethereum về mặt ngữ nghĩa và xác minh một hợp đồng thông
3 Công việc liên quan
minh cụ thể có tên là Deed. ZEUS[8] có thể nhanh chóng xác minh
3.1 Thử nghiệm đột biến Thử các hợp đồng bảo mật thông qua các công nghệ, chẳng hạn như
giải thích trừu tượng, kiểm tra mô hình biểu tượng và các điều
nghiệm đột biến lần đầu tiên được đề xuất bởi DeMillo và cộng sự.
khoản sừng bị ràng buộc.
[13] vào năm 1978. Sau khi phát triển liên tục [18–20], nó đã có
Ngoài ra, nhiều học giả đã kiểm tra tính bảo mật của hợp
thông tin ngữ nghĩa chính xác liên quan đến hợp đồng.
3 số dư[msg.sender] = uint64(msg.value) 4
1 hàm transferFrom(địa chỉ tới, giá trị int ) SolidityCheck[42] định dạng mã, lọc từ khóa, sau đó sử dụng các
2 biểu thức thông thường để phát hiện lỗ hổng trong mã được lọc
3 số dư[to]=số dư[to].add(uint(value)) hoặc chèn mã để ngăn chặn sự xuất hiện của lỗ hổng.
4
Jinlei Sun và cộng sự: Thử nghiệm đột biến cho tràn số nguyên trong hợp đồng thông minh Ethereum 31
Slither[43] là một khung phân tích tĩnh ba loại toán tử tương ứng với thư viện SafeMath bị thiếu
chuyển đổi một hợp đồng thông minh đáng tin cậy thành một hợp đồng trung gian hoặc không được sử dụng, câu lệnh kiểm tra sai và câu lệnh
đại diện được gọi là SlithIR; nó áp dụng các kỹ thuật phân tích kiểm tra bị thiếu tương ứng.
chương trình, chẳng hạn như luồng dữ liệu và theo dõi ô nhiễm, 4.1.1 Thay thế Hoạt động SafeMath (SOR)
để trích xuất và tinh chỉnh thông tin. Durieux và cộng sự.[44]
Thư viện SafeMath đã viết lại các toán tử số học như C; ; ;
đã sàng lọc các công cụ phân tích hợp đồng thông minh hiện có
=; và % và đã thêm kiểm tra trong quá trình hoạt động để
và chạy chín công cụ trên 69 hợp đồng thông minh với 115 lỗ hổng.
ngăn tràn số nguyên.
Kết quả cho thấy rằng tổng tỷ lệ phát hiện của thông minh
Không làm mất tính tổng quát, chúng tôi giả định rằng thư
phát hiện lỗ hổng hợp đồng của các công cụ trên là 42%
viện SafeMath được giới thiệu trong hợp đồng thông minh
với một số không gian để cải thiện.
không có lỗ hổng số nguyên và các hoạt động sử dụng hàm thư
Về mặt thử nghiệm động, Jiang và cộng sự.[45] đã đề xuất
viện trong hợp đồng thông minh sẽ không gây tràn số nguyên.
ContractFuzzer, khuôn khổ kiểm tra lỗ hổng bảo mật đầu tiên
Tuy nhiên, người lập trình có thể không sử dụng đúng các
cho các hợp đồng thông minh Ethereum. Nó tạo đầu vào thử
hàm trong thư viện SafeMath trong quá trình lập trình. Ví
nghiệm tuân theo cú pháp cuộc gọi của hợp đồng gọi điện,
dụ: mặc dù thư viện SafeMath được giới thiệu, các toán tử
xác định các dự đoán thử nghiệm mới và sử dụng EVM giám sát
số học có thể được sử dụng trực tiếp trong phép toán. Toán
thông tin thực thi hợp đồng thông minh để phát hiện các lỗ
tử SOR mô phỏng điều này; nó biến hàm SafeMath trong hợp
hổng. ContraMaster[46] là một khung thử nghiệm động hợp
đồng thông minh thành một toán tử số học, và biểu diễn và
đồng thông minh dựa trên tiên tri thử nghiệm mới. Nó hướng
mô tả cụ thể của nó được thể hiện trong Bảng 1.
dẫn quy trình fuzzing thông qua luồng dữ liệu, luồng điều
4.1 Toán tử đột biến tràn số học ở ba dạng: yêu cầu (), khẳng định () và nếu
các câu lệnh.
Sử dụng thư viện SafeMath hoặc thêm các điều kiện kiểm tra
Các nghiên cứu trước đây [9, 35] đã đề xuất các toán tử
trong các phép tính số học có thể ngăn chặn sự xuất hiện
đột biến xóa các câu lệnh require() và assert().
của tràn số học. Tuy nhiên, những phương pháp này là không
Tuy nhiên, không phải tất cả sự vắng mặt của các câu lệnh
đủ vì những lý do sau đây. Đầu tiên, thư viện SafeMath
require() và assert() sẽ gây ra lỗi tràn số học. Giải pháp
không được giới thiệu trong tất cả các hợp đồng thông minh.
được đề xuất trong nghiên cứu này là so khớp thông qua các
Torres và cộng sự[37] đã phân tích 495 hợp đồng thông minh token trên
Ethereum và thấy rằng 32% trong số họ không sử dụng biểu thức chính quy và tìm các câu lệnh require() và
minh sử dụng thư viện SafeMath, lập trình viên cũng có thể
Bảng 1 Toán tử thay thế phép toán SafeMath.
sử dụng trực tiếp các toán tử số học thay vì các hàm
Nhà điều hành Sự miêu tả
SafeMath do sơ suất, như ví dụ được mô tả trong CVE-2018-10299 SORadd Thay SafeMath.add() bằng “+”
[48]. Thứ ba, câu kiểm tra sai cũng có thể gây ra lỗi này. SORsub Thay SafeMath.sub() bằng “”
SORmul Thay SafeMath.mul() bằng “”
Dựa trên phân tích trên, chúng tôi đề xuất ba loại toán SORdiv Thay SafeMath.div() bằng “=”
tử đột biến cho các phép toán số học. Những cái này SORmod Thay SafeMath.mod() bằng “%”
Machine Translated by Google
32 Khoa học và Công nghệ Thanh Hoa, tháng 2 năm 2022, 27(1): 27–
40
3 uint256 f
3 chức năng thêm ( tiền gửi uint256) công khai f
6 trở lại cI
6 g
7 7g _
g
số 8
Hình 7 Đột biến CSD cho Tràn thêm.
9g _
16 // Thay đổi ”SafeMath.sub()” thành ”–” Việc thiết lập các điều kiện không chính xác cũng có thể dẫn đến
17 //balances[msg.sender] = SafeMath.sub( tràn số học. Do đó, một toán tử đột biến cho
18 // số dư [msg.sender], giá trị) sửa đổi câu điều kiện phải được thiết kế.
19 số dư[msg.sender]=
Các nghiên cứu trước đây [9, 35] cũng đã đề xuất các toán tử
20 số dư[msg.sender]–
giá trị;
làm biến chất các toán tử quan hệ >, , <, , Tuy nhiên, vân vân.
24g _
câu điều kiện ngăn tràn số nguyên là
25g _ sử dụng không chính xác có thể xảy ra tràn số nguyên. Vì thế,
26 tương tự như CSD, trước tiên chúng tôi sử dụng biểu thức chính quy
biểu thức số học được kiểm tra lại. Nếu giống nhau Ngôn ngữ Solidity hỗ trợ nhiều loại số nguyên
các tham số xuất hiện trong các câu lệnh điều kiện, chẳng hạn từ 8 đến 256 bit, với kích thước bước thay đổi là 8 và
như yêu cầu (), trong cùng một chức năng, thì điều kiện
Bảng kích thước đầy đủ
tuyên bố được coi là một điều kiện ngăn chặn tràn
Nhà điều hành Sự miêu tả
phát biểu của công thức trên.
CSCa Thay đổi câu khẳng định()
Các toán tử đột biến CSDa, CSDr và CSDi CSCr Thay đổi câu yêu cầu ()
xóa các câu lệnh khẳng định (), yêu cầu () và nếu khớp CSCI Thay đổi nếu câu
3 //yêu cầu(b<a);
Bảng kích thước đầy đủ
4 require(b>a);//thay đổi các toán tử quan hệ
Nhà điều hành Sự miêu tả
5 trả lại ab; // Dòng chảy ngầm
CSDA Xóa câu khẳng định()
6 g
CSDr Xóa câu yêu cầu ()
7g _
CSDi Xóa nếu câu
Hình 8 Đột biến CSC cho Sub đơn giản.
Machine Translated by Google
Jinlei Sun và cộng sự: Thử nghiệm đột biến cho tràn số nguyên trong hợp đồng thông minh Ethereum 33
hỗ trợ các loại địa chỉ. Lỗi tràn cắt ngắn trong hợp đồng Hình 10. Tham số đầu vào lượng của hàm rút lạiOnce() có
thông minh Solidity thường do chuyển đổi số nguyên có độ kiểu int và Dòng 6 của mã chuyển đổi nó thành kiểu uint khi
rộng bit thành số nguyên có độ rộng bit. nó được sử dụng. Sau đó, tràn đã ký xảy ra. Nó có thể khiến
Chỉ cần chuyển đổi trực tiếp mã định danh loại có độ hàm transfer() gửi thêm ête tới msg.sender.
rộng bit thành loại có độ hẹp bit có thể không trực tiếp
gây ra lỗi tràn cắt ngắn. Do đó, chúng tôi thiết kế toán tử
4.4 Tóm tắt các toán tử
Thay đổi loại biến (VTC) để chuyển đổi loại chiều rộng bit
Năm toán tử đột biến trong nghiên cứu này khác với các toán
được xác định ban đầu thành loại hẹp bit khi sử dụng. Toán
tử trong các nghiên cứu trước đây [9, 33, 34]. Các toán tử
tử được thể hiện trong Bảng 4.
này có thể mô phỏng chính xác các lỗi tràn số nguyên khác nhau.
Một ví dụ về toán tử VTC được hiển thị trong Hình 9.
Trong số các toán tử trong nghiên cứu này, SOR được đề xuất
Biến “tiền gửi” ban đầu có kiểu uint, nghĩa là kiểu số
lần đầu tiên để mô phỏng các lỗi tràn số học gây ra bởi
nguyên của uint256. Khi nó được tính toán trong hàm add(),
việc sử dụng không đúng chức năng SafeMath trong ESC. Mặc
nó được chuyển thành uint64. Nếu tiền gửi có giá trị tương
dù các toán tử, chẳng hạn như CSD, CSC, VTC và SUR/USR,
đối lớn, thì có thể xảy ra tình trạng tràn do cắt ngắn.
cũng được sử dụng trong thử nghiệm đột biến truyền thống,
4.3 Toán tử đột biến tràn có dấu chúng tôi đã thực hiện các cải tiến để cho phép toán tử này
Các kiểu số nguyên trong ngôn ngữ Solidity được chia thành được sử dụng riêng trong thử nghiệm đột biến ESC. CSD và
kiểu số nguyên có dấu int và kiểu số nguyên không dấu uint. CSC sử dụng các biểu thức chính quy để tìm các câu lệnh có
Nếu giá trị đã được gán cho kiểu số nguyên có dấu int lại điều kiện, được sử dụng để ngăn chặn các lỗ hổng tràn số
được chuyển đổi thành kiểu số nguyên không dấu uint, thì nguyên, sau đó thực hiện xóa và sửa đổi để mô phỏng các lỗi
tràn số có dấu sẽ xảy ra và ngược lại. Tương tự như lỗi tràn số học; Các toán tử VTC và SUR/USR tìm định nghĩa của
tràn do cắt bớt, việc thay đổi trực tiếp định nghĩa kiểu một biến và sau đó sửa đổi kích thước và ký hiệu của nó để
trong mã hoàn toàn không gây ra lỗi tràn đã ký. Do đó, mô phỏng quá trình cắt bớt và tràn ký hiệu.
chúng ta cần chuyển đổi giá trị ban đầu được xác định là số Những khác biệt của các toán tử đột biến được đề xuất được
nguyên có dấu int thành số nguyên không dấu uint và ngược mô tả trong Bảng 6.
đã ký. Toán tử SUR chuyển đổi số nguyên có dấu int thành số Trong phần này, chúng tôi tiến hành nghiên cứu thực nghiệm
nguyên không dấu uint và USR chuyển đổi số nguyên không dấu để đánh giá các toán tử đột biến tràn số nguyên được đề xuất
uint thành số nguyên có dấu int. Tên và mô tả của các nhà
khai thác được hiển thị trong Bảng 5. 1 hàm rútOnce ( số tiền int) public f 2
3 revert();
Một ví dụ về toán tử SUR được hiển thị trong
4
Bảng 4 Toán tử đột biến tràn cắt ngắn. 5 g // Thay đổi int “số tiền” thành
6 7 gam
1 co Tru Add f 2 uint Hình. 10 Đột biến SUR để rút tiền Một lần.
public balance = 1; chức năng
Bảng kích thước đầy đủ
3 thêm (tiền gửi uint256 ) công khai yêu
Toán tử Mô tả SOR Lần đầu tiên được đề xuất
4 cầu (số dư < số dư + tiền gửi); số
trong công việc này.
5 dư = uint64(tiền gửi) + (số dư); g
CSD Xóa câu điều kiện dùng để
6
ngăn tràn số nguyên trong ESC.
7g _
CSC Thay đổi câu điều kiện được sử dụng để ngăn tràn số
Hình 9 Đột biến VTC cho Tru Add. nguyên trong ESC.
Bảng kích thước đầy đủ VTC Thay đổi kích thước của một biến khi nó được sử dụng sau
nó được định nghĩa trong ESC.
Mô tả nhà điều hành
SUR SUR/USR Thay đổi dấu của một biến khi nó được sử dụng sau
Đã ký thay thế chưa ký
nó được định nghĩa trong ESC.
USR Unsigned để thay thế đã ký
Machine Translated by Google
34 Khoa học và Công nghệ Thanh Hoa, tháng 2 năm 2022, 27(1): 27–
40
bên trên. Sau đây, các câu hỏi nghiên cứu được đặt ra trước tiên 5.2 Dữ liệu thực nghiệm
5.1 Câu hỏi nghiên cứu bộ dữ liệu SBCURATED trong Ref. [14]. Vị trí và
loại lỗ hổng trong các hợp đồng này được biết đến và
Mục tiêu của phần này là để trả lời những điều sau đây
thường được sử dụng trong kiểm tra tính hợp lệ của phân tích ESC
câu hỏi nghiên cứu:
công cụ. Phần thứ hai là ESC đã được triển khai trên
RQ1: Toán tử đột biến có hiệu quả không
Chuỗi khối Ethereum. Tham khảo [49] liệt kê chín loại
đột biến ESC? Trong quá trình thử nghiệm ESC,
số lượng mã nguồn của hợp đồng thông minh bị lỗi về lỗ hổng tràn số nguyên trong Mã thông báo ERC20. TRONG
mỗi danh mục, một số hợp đồng thông minh được liệt kê. Các
có giới hạn. Một trong những mục tiêu của chúng tôi là có thể biến đổi
phần đầu tiên của tập dữ liệu là mã mẫu được sử dụng để hiển thị
hợp đồng thông minh thông qua các nhà khai thác được đề xuất trong này
lỗ hổng; hầu hết chúng đều tương đối ngắn.
nghiên cứu và mô phỏng các loại lỗi tràn số nguyên trong
ESC. Do đó, chúng tôi thêm phần thứ hai để tăng cường
chọn tối đa năm hợp đồng thông minh từ mỗi danh mục
công cụ kiểm tra? Thử nghiệm đột biến có thể đánh giá và thúc đẩy
hiệu suất của các trường hợp thử nghiệm hoặc công cụ thử nghiệm bằng cách tạo
(có thể ít hơn 5 trong một số danh mục) do
Kích hoạt bỏ qua tràn bằng cách nhập các tham số lớn hơn và
hàng loạtTransfer-tràn 5 10 1330
sử dụng hàm batchTransfer() để chuyển hàng loạt.
Khi thực hiện chuyển giao và các hoạt động khác trong
xác minh không hợp lệ do tràn hợp đồng, số dư sẽ được xác minh và xác minh 2 2 604
có thể được bỏ qua để đạt được chuyển giao bất hợp pháp thông qua tràn.
Người sở hữu xây dựng một giá trị trao đổi lớn để
bán-giá-cho-tràn tràn ether được chuyển đổi được tính toán, và 2 10 432
giảm cân bằng tràn Chủ sở hữu kiểm soát số dư tài khoản bằng cách thêm nhiều
5 24 1126
mã thông báo vào tài khoản để đạt được mức tràn.
Khi chủ sở hữu phân bổ mã thông báo cho tài khoản, anh ta có thể
phân bổ thừa theo
bỏ qua giới hạn trên bằng cách tràn, do đó chỉ định 1 14 341
tràn
nhiều mã thông báo hơn đến địa chỉ được chỉ định.
Chủ sở hữu tạo tràn bằng cách chuyển vào một giá trị lớn,
thừa-mint-token-by tràn
bỏ qua việc thiết lập giá trị tối đa của tiền xu trong 3 9 778
Người dùng mua một số lượng đủ lớn các mã thông báo để tạo một
dư thừa-mua-token-by
tràn, do đó bỏ qua giới hạn trên của đồng xu 3 42 992
tràn
phát hành và nhận được nhiều mã thông báo hơn.
ví dụ về tràn Hợp đồng thông minh minh họa các lỗ hổng tràn số nguyên. 10 24 353
Jinlei Sun và cộng sự: Thử nghiệm đột biến cho tràn số nguyên trong hợp đồng thông minh Ethereum 35
kiểm tra thủ công các lỗ hổng tràn số nguyên trong xem xét thủ công và đếm số lượng được tạo
hợp đồng và đánh dấu chúng; sau đó, chúng tôi sửa các số nguyên này đột biến với lỗ hổng tràn số nguyên.
tràn lỗ hổng để có được phiên bản sửa chữa của Thứ ba là điều tra xem liệu các dị nhân có thể
mỗi ESC. đạt được sự mô phỏng của các lập trình viên có xu hướng
5.3 Thí nghiệm 1: Hiệu quả của đột biến phạm sai lầm trong quá trình mã hóa. người đột biến
toán tử trong việc tạo đột biến gần với lỗ hổng thực sự hơn và trường hợp thử nghiệm có thể
được đánh giá thêm. Để kết thúc này, chúng tôi phân tích xem liệu
Trong thử nghiệm này, chúng tôi sử dụng tỷ lệ hợp lệ của
các đột biến được tạo bao gồm các loại số nguyên khác nhau
đột biến bởi các nhà khai thác của chúng tôi, số lượng đột biến mà
lỗ hổng tràn trong ESC. Sau đó, chúng tôi tính
chứa các lỗ hổng tràn số nguyên và số
số lỗ hổng trong ESC ban đầu có thể
các lỗ hổng ban đầu có thể được sao chép thành
được sao chép.
đánh giá hiệu quả của đột biến đề xuất
5.3.2 Kết quả của Thí nghiệm 1
người vận hành.
5.3.1 Bố trí thí nghiệm Kết quả của các đột biến được tạo ra từ 40 ESC bởi
các toán tử đột biến được đề xuất được trình bày trong Bảng 8. Trong
Mục đích của thí nghiệm này là để đánh giá
theo cách này, tất cả các thể đột biến được chọn cho thí nghiệm này
hiệu quả của các nhà khai thác của chúng tôi trong việc tạo ra các đột biến. ĐẾN
chủ yếu được tiến hành từ ba khía cạnh sau: Các toán tử CSC và CSD được thay đổi theo điều kiện
Đầu tiên là đếm số lượng đột biến có thể phát biểu tương ứng với phép toán số học.
biên soạn. Mã Solidity được viết bởi lập trình viên Sự khác biệt là toán tử CSC thay đổi
cuối cùng có thể được biên dịch. Nếu đột biến được tạo ra không thể câu và toán tử CSD trực tiếp xóa
vượt qua trình biên dịch Solidity, ngay cả khi nó chứa một số nguyên câu. Số lượng thể đột biến được tạo ra bởi
lỗ hổng tràn, nó không có tác dụng trong thử nghiệm đột biến. Toán tử SOR tương đối nhỏ (chỉ 89) vì
Cuối cùng, chúng tôi sử dụng trình biên dịch Solidity để có được số lượng đột biến được tạo bởi SOR cho một số ESC
số lượng đột biến có thể được biên dịch. là 0. Phân tích sâu hơn cho thấy ESC trong một số
Thứ hai là để kiểm tra số lượng đột biến mà các danh mục không sử dụng thư viện hàm SafeMath và
chứa tràn số nguyên. Mục đích của nghiên cứu này là để toán tử SOR là toán tử đột biến cho SafeMath
điều tra thử nghiệm đột biến cho tràn số nguyên trong ESC. chức năng thư viện. Số lượng thể đột biến được tạo ra bởi
Do đó, chúng ta cần các toán tử để tạo ra các đột biến VTC và SUR/USR tương đối lớn (732 và
với lỗ hổng tràn số nguyên. Nếu một dị nhân làm 676, tương ứng) vì hai toán tử đột biến này
không chứa bất kỳ lỗ hổng tràn số nguyên nào, thì nó thay đổi đối với các biến có kiểu số nguyên, thường là
được sử dụng trong ESC.
không có tác dụng trong việc đánh giá test case. Để đạt được điều này, chúng tôi
36 Khoa học và Công nghệ Thanh Hoa, tháng 2 năm 2022, 27(1): 27–
40
Đối với khía cạnh đầu tiên, chúng tôi quan sát xem người đột biến có đột biến chứa tràn số nguyên. Số hợp lệ
có thể được tuân thủ. Các đột biến có thể được biên dịch là đột biến có chứa lỗ hổng tràn số nguyên là
được gọi là Hợp lệ; nếu không, nó được gọi là Không hợp lệ. Con số thể hiện trong Dòng 3 của Bảng 9.
và tỷ lệ các đột biến hợp lệ và không hợp lệ được hiển thị trong Trong số 1393 người đột biến hợp lệ, 1323 (95%)
dòng 2 của bảng 9. Trong bảng 9, dòng đầu tiên là số chứa các lỗ hổng tràn số nguyên. Chúng tôi đã sửa
của các đột biến được tạo ra, dòng thứ hai là số các lỗ hổng tràn số nguyên trong bản gốc
của các đột biến hợp lệ có thể được tuân thủ bởi Solidity hợp đồng; do đó, các lỗ hổng tràn số nguyên này là
complier, và dòng thứ ba là số lượng đột biến mà được coi là được tạo ra bởi các toán tử đột biến.
chứa lỗ hổng tràn số nguyên. Hầu hết các đột biến được tạo ra (297 trong 301) bởi CSC
Như thể hiện trong Dòng 2 của Bảng 9, 1393 của tất cả 2099 và toán tử CSD chứa ít nhất một tràn số nguyên
đột biến (khoảng 66%) là Hợp lệ. Từ dễ bị tổn thương. Bằng cách phân tích các đột biến không có số nguyên
quan điểm của các toán tử đột biến khác nhau, tất cả các lỗ hổng tràn, chúng tôi thấy rằng việc triển khai
các đột biến được tạo bởi các toán tử CSC, CSD và SOR quá trình khớp cho câu lệnh điều kiện không phải là
là hợp lệ, với tỷ lệ 100%. Hầu hết các dị nhân đủ chính xác, dẫn đến bốn đột biến mà
được tạo bởi VTC (695 trong 732) là Hợp lệ, với tỷ lệ không thể kích hoạt tràn số nguyên. vấn đề này xảy ra
xấp xỉ 95%. Bằng cách phân tích các dị nhân không hợp lệ, trong việc thực hiện mã chứ không phải là một đột biến
chúng tôi thấy rằng các tham số đầu vào trước SafeMath nhà điều hành. Số thể đột biến không chứa
chức năng thư viện, chẳng hạn như “.add()”, không thể biên dịch lỗ hổng tràn số nguyên (62) lớn hơn nhiều
sau đột biến. Vì hợp đồng quy định rằng hơn số lượng đột biến với tràn số nguyên
Thư viện SafeMath chỉ được sử dụng cho số nguyên kiểu uint256, lỗ hổng (27) trong các đột biến được tạo ra bởi
và VTC chuyển đổi số nguyên uint256 thành số nguyên uint128, toán tử SOR. Hiện tượng này chủ yếu do
và sau đó xảy ra lỗi biên dịch khi sử dụng bởi hai lý do. Một mặt, một số Safemath
Hàm SafeMath. Hầu hết các đột biến được tạo ra bởi đầu vào của chức năng là hằng số. Thay đổi chức năng
SUR/USR không hợp lệ. Chỉ có 7 trong số 676 dị nhân là đến các toán tử thông thường không thể gây tràn số nguyên
Có hiệu lực. Qua phân tích, chúng tôi thấy rằng SUR/USR dễ bị tổn thương. Mặt khác, nếu một câu lệnh điều kiện
toán tử thay đổi kiểu của một số nguyên khi số nguyên để ngăn tràn số nguyên cũng được chứa, sau đó
biến được sử dụng sau định nghĩa. Hầu hết các biến biến đổi hàm Safemath không gây ra số nguyên
được sử dụng để tham gia vào số học hoặc chuyển vào lỗ hổng tràn. VTC và SUR/USR thay đổi
chức năng như các tham số. Một mặt, khi các biến loại biến, điều này chắc chắn gây ra sự cắt ngắn hoặc ký tên
với các ký hiệu khác nhau có mặt trong số học, lỗ hổng tràn. Các phân tích trên cho thấy rằng
vượt qua trình biên dịch Solidity là không thể. trên các toán tử đột biến được đề cập trong nghiên cứu này có thể
mặt khác, nếu loại đầu vào không khớp với tạo hiệu quả các đột biến lỗi số nguyên.
chức năng, sau đó mã không thể được biên dịch, dẫn đến Đối với khía cạnh thứ ba, chúng tôi đếm số lượng và
nhiều dị nhân không hợp lệ. Hơn nữa, chức năng đột biến tỷ lệ tổn thương sinh sản.
với các loại đối số đầu vào linh hoạt gây ra bảy 179 lỗ hổng tràn số nguyên trong
Mutants được biên dịch thành công. Kết quả này cũng các hợp đồng thông minh ban đầu đều được sao chép. Bằng cách phân tích
cho thấy rằng toán tử đột biến của tràn đã ký kết quả, chúng tôi thấy rằng các toán tử được đề xuất
đối với hợp đồng thông minh Solidity gần như không hợp lệ. Nếu chúng ta có thể tái tạo các lỗ hổng số nguyên trong bản gốc
loại bỏ các đột biến được tạo bởi toán tử SUR/USR, hợp đồng thông minh, điều này cũng cho thấy rằng đề xuất
chúng ta có thể kết luận rằng Tỷ lệ hợp lệ của các đột biến là 97% toán tử có thể mô phỏng hiệu quả tràn số nguyên
(1386 năm 1423). Kết quả trên cho thấy đột biến lỗ hổng trong ESC. Ngoài ra, nhà điều hành CSC
toán tử được đề cập trong nghiên cứu này có thể tạo ra một cách hiệu quả gây ra một số lỗi logic và thay đổi bản gốc
Đột biến hợp lệ. đường dẫn thực thi của chương trình. Vì vậy, so sánh
Đối với khía cạnh thứ hai, chúng tôi tính xem Hợp lệ với CSC, toán tử CSD phù hợp để tạo
Bảng 9 Số đột biến có thể được tuân thủ và chứa các lỗ hổng tràn số nguyên.
Jinlei Sun và cộng sự: Thử nghiệm đột biến cho tràn số nguyên trong hợp đồng thông minh Ethereum 37
đột biến lỗ hổng số nguyên thuần túy. (1386 năm 1423). Trong khi đó, 95% (1323 trong 1393) của
Để tiến hành một thử nghiệm so sánh với hiện có các đột biến hợp lệ chứa các lỗ hổng tràn số nguyên,
công cụ, nghiên cứu này lựa chọn phương pháp được đề xuất bởi và 179 lỗ hổng tràn số nguyên trong
Andesta và cộng sự[35]. Phương pháp này thiết kế 10 loại ESC ban đầu đều được sao chép bởi các toán tử đột biến.
toán tử đột biến cho các loại hợp đồng thông minh khác nhau Thông qua phân tích so sánh, phương pháp đề xuất
lỗ hổng, bao gồm tràn số nguyên. chúng tôi sử dụng trong nghiên cứu này vượt trội so với các phương pháp hiện có trong
công cụ được triển khai trên cơ sở trình biến đổi phổ quát đột biến tràn số nguyên. Vì vậy, đột biến
của nghiên cứu này để thực hiện đột biến tràn số nguyên nhà điều hành đề xuất trong nghiên cứu này được coi là có thể
trên 40 ESC đã chọn. Kết quả cho thấy năm 2022 để (a) tạo cả ba kiểu tràn số nguyên
trong số tất cả 5422 đột biến có thể được tổng hợp, với tỷ lệ phần trăm các lỗ hổng một cách hiệu quả và (b) tái tạo các lỗ hổng khác nhau
là 40,6%. Qua phân tích sâu hơn, chúng tôi thấy rằng lỗ hổng tràn số nguyên trong ESC thế giới thực.
nhưng trực tiếp thay đổi tất cả các điều kiện thành “True” hoặc công cụ phát hiện lỗ hổng có tên Osiris[37], hãy tìm
“Sai” và do đó không gây tràn số nguyên khuyết điểm và nâng cao hiệu quả.
thất bại nhưng là một thất bại logic. Ngoài ra, Safemath 5.4.1 Thiết lập thí nghiệm
chức năng không bị đột biến trong Ref. [35]. Do đó, các Mục đích của thí nghiệm này là để đánh giá
Phương pháp được đề xuất trong nghiên cứu này hiệu quả hơn phương pháp
hiệu quả của các đột biến trong việc đánh giá các trường hợp thử nghiệm hoặc
phương pháp của Andesta và cộng sự.[35] về tràn số nguyên
công cụ kiểm tra bằng cách tính điểm đột biến của thử nghiệm
lỗ hổng' đột biến. Ưu điểm của Ref. [35]
công cụ trong quá trình thử nghiệm.
Bảng 10 Kết quả chạy Osiris trên các dị nhân. “T” đại diện cho số lượng các đột biến phù hợp, “K” đại diện cho
số dị nhân bị giết bởi Osiris, và “S” đại diện cho số dị nhân còn sống sót.
CSC CSD SOR VTC SUR/USR
Loại
TKS TKS TKSTKSSTKS
hàng loạtTransfer-tràn 25 12 13 25 16 9 18 12 6 62 1 61 0 0 0
tổng cung-tràn xác 61 27 34 61 29 32 0 0 0 112 2 110 2 0 2
minh-không hợp lệ-do tràn- 4 0 4 4 0 4 0 0 0 54 0 54 5 0 5
giá-bán-cho-tràn-thừa- 25 20 5 25 22 3 0 0 0 61 2 59 0 0 0
mã thông báo-theo-tràn giảm- 12 số 8 4 12 9 3 0 0 0 53 0 53 0 0 0
cân bằng-theo-tràn vượt quá- 73 51 22 73 52 21 3 2 1 141 2 139 0 0 0
phân bổ theo tràn vượt quá- 12 4 số 8 12 0 12 0 0 0 26 0 26 0 0 0
đúc-mã thông báo-theo-tràn-mua 18 14 4 18 16 2 6 6 0 49 1 48 0 0 0
-token-by-overflow ví dụ về 51 6 45 51 0 51 0 0 0 111 3 108 0 0 0
tràn 16 4 12 16 14 2 0 0 0 26 0 26 0 0 0
Tổng cộng 297 146 151 297 158 139 27 20 7 695 11 684 7 0 7
Machine Translated by Google
38 Khoa học và Công nghệ Thanh Hoa, tháng 2 năm 2022, 27(1): 27–40
của các đột biến được tạo ra, bị giết và sống sót bởi các nhà khai Do đó, các toán tử đột biến được đề xuất trong nghiên cứu này có
thác CSC, CSD, SOR, VTC và SUR/USR trong Bảng 10. thể được coi là hiệu quả trong việc đánh giá các công cụ kiểm tra
Điểm số đột biến sau đó được tính toán. lỗ hổng tràn số nguyên và giúp cải thiện tính đầy đủ của nó.
Để chứng minh khả năng của Osiris trong việc phát hiện lỗ hổng
tràn số nguyên một cách trực quan, chúng tôi vẽ sơ đồ điểm số đột
6 Mối đe dọa đối với giá trị
biến của Osiris giữa các đột biến khác nhau trong Hình 11.
Một mối đe dọa đối với tính hợp lệ trong đánh giá của chúng tôi có
Osiris có điểm đột biến cao nhất trong số các dị nhân do toán tử
thể là chúng tôi chủ yếu chọn các hợp đồng thông minh Mã thông báo
đột biến SOR tạo ra, đạt 74,1 (tiêu diệt 20 trong số 27 dị nhân).
ERC20 để tiến hành thử nghiệm của mình và do đó có thể mang lại tính
Các dị nhân sống sót chủ yếu có đột biến trong khối vòng lặp “for”,
phiến diện cho kết quả thử nghiệm. Để giảm bớt tình trạng này, chúng
cho thấy Osiris gặp khó khăn trong việc phát hiện các lỗ hổng tràn
tôi đã chọn 30 hợp đồng thông minh mã nguồn mở với 9 loại lỗ hổng
số nguyên như vậy. Osiris đạt điểm thấp đối với các đột biến do VTC
tràn số nguyên khác nhau. Đồng thời, một số hợp đồng thông minh,
và SUR/USR tạo ra (1,6 và 0), cho thấy rằng Osiris khó có thể phát
được sử dụng làm ví dụ cho lỗ hổng tràn số nguyên ESC, được chọn.
hiện ra phần cắt ngắn và tràn ký tự trong ESC.
Một mối đe dọa khác đối với tính hợp lệ của đánh giá của chúng
Điểm đột biến của Osiris trong các dị nhân CSC và CSD là 49,2 và
tôi có thể là trong Thử nghiệm 2, chúng tôi chỉ chọn một công cụ
53,2, tương đương với khoảng một nửa số dị nhân bị giết. Các dị nhân
kiểm tra lỗ hổng tràn số nguyên, điều này có thể không đủ để phản
CSC và CSD còn sống sót có thể được chia thành ba loại. Đầu tiên là
ánh hiệu quả của phương pháp này trong việc đánh giá các trường hợp
câu biến thể trong thể dị nhân là
kiểm tra hoặc công cụ kiểm tra khác. Chúng tôi sẽ thử nhiều công cụ
quan đến các con số. Thứ ba là kết quả của số học không được sử
7 Kết luận và công việc trong tương lai
dụng. Hai loại đầu tiên là sự thiếu sót trong khả năng phát hiện
của Osiris. Loại thứ ba, kết quả số học không được sử dụng có thể Tràn số nguyên là một trong những lỗ hổng phổ biến nhất trong ESC
bị tràn nhưng không gây hậu quả nghiêm trọng; đặc điểm như vậy là và nó gây ra nhiều thiệt hại về kinh tế. Do đó, việc tìm ra lỗ hổng
một lợi thế của Osiris. tràn số nguyên trong ESC là rất quan trọng. Kiểm thử đột biến là
một kỹ thuật để đánh giá các trường hợp kiểm thử và cải thiện mức
độ đầy đủ của kiểm thử. Nghiên cứu này áp dụng thử nghiệm đột biến
Trả lời cho RQ2: Các đột biến do người vận hành đột biến tạo ra để kiểm tra lỗ hổng tràn số nguyên trong ESC và đề xuất năm toán tử
có thể đánh giá hiệu quả các trường hợp thử nghiệm hoặc công cụ thử đột biến dành riêng cho lỗ hổng tràn số nguyên.
nghiệm không? Thông qua các đột biến được tạo bởi toán tử đột biến
được đề xuất trong nghiên cứu này, công cụ phát hiện lỗ hổng tràn Nghiên cứu thực nghiệm cho thấy rằng các toán tử đột biến trong
số nguyên Osiris được đánh giá và điểm số đột biến của Osiris trên nghiên cứu này có thể tạo ra các đột biến lỗ hổng tràn số nguyên và
CSC, CSD, SOR, VTC và SUR/USR là 49,2, 53,2, 74,1, 1,6 , và 0 tương đánh giá các công cụ kiểm tra lỗ hổng tràn số nguyên. Nói cách khác,
ứng. Bằng cách phân tích những dị nhân còn sống sót, chúng ta có thể phương pháp của chúng tôi có hiệu quả trong việc cải thiện chất
biết được những ưu điểm và nhược điểm của Osiris. lượng kiểm tra lỗ hổng tràn số nguyên trong ESC. Trong công việc
tương lai của chúng tôi, một mặt, chúng tôi sẽ nghiên cứu những
thiếu sót của toán tử đột biến trong nghiên cứu này và mở rộng ứng
dụng cho các trường hợp thử nghiệm khác và đánh giá công cụ thử
nghiệm. Mặt khác , chúng tôi sẽ mở rộng thử nghiệm đột biến sang
Nhìn nhận
Dự án được hỗ trợ bởi Chương trình NC&PT trọng điểm quốc gia Trung
Quốc (Số 2018YFB1403400), Quỹ khoa học tự nhiên quốc gia Trung Quốc
(Số 61702544), Quỹ khoa học tự nhiên tỉnh Giang Tô, Trung Quốc
Hình 11. Điểm đột biến của Osiris trên các toán tử khác nhau.
Machine Translated by Google
Jinlei Sun và cộng sự: Thử nghiệm đột biến cho tràn số nguyên trong hợp đồng thông minh Ethereum 39
(Số BK20160769 và BK20141072) và Quỹ Khoa học Sau [20] M. Polo, M. Piattini, và I. Garc´ıa-Rodr´ıguez, Giảm chi phí thử
Tiến sĩ Trung Quốc (Số 2016M603031). nghiệm đột biến với các thể đột biến bậc hai, Softw. Bài kiểm
tra. xác minh. Đáng tin cậy, tập. 19, không. 2, trang 111–
131, 2009.
Ventresque, PIT: Một công cụ kiểm tra đột biến thực tế cho Java,
¨
trong Proc. Quốc tế thứ 25 Symp, Saarbrücken, Đức, 2016.
[1] S. Nakamoto, Bitcoin: Tiền điện tử ngang hàng
[22] A. Derezinska và A. Szustek, Khả năng kiểm tra hướng đối tượng và
hệ thống, https://bitcoin.org/en/bitcoin-paper, 2008.
đánh giá hiệu suất của hệ thống đột biến C#, trong Proc. IFIP TC
[2] G. Wood, Ethereum: Sổ cái giao dịch tổng quát phi tập trung an toàn,
2 lần thứ 4 Trung và Đông Âu Conf. Kỹ thuật Công nghệ Phần mềm,
http://gavwood.com/Paper.pdf, 2014.
Krakow, Ba Lan, 2012, trang 229–242.
[3] Solidity, https://solidity.readthedocs.io/en/develop/, 2020.
[4] I. Nikolic A. Kolluri, I. Sergey, P. Saxena và A. Hobor, Tìm kiếm ´
[23] P. Delgado-Perez, I. Medina-Bulo, F. Palomo-Lozano, A. Garc´ıa-Dom
các hợp đồng tham lam, hoang đàng và tự sát trên quy mô lớn, bản
´ınguez, và JJ Dom´ınguez-Jimenez, ´ Đánh giá toán tử đột biến
in lại arXiv arXiv: 1802.06038v2, 2018.
[5] D. Siegel, Hiểu về cuộc tấn công DAO, https://www.coindesk.com/under lớp cho C++ bằng MuCPP hệ thống đột biến, Inf. mềmw. Công nghệ,
[6] Công nghệ chẵn lẻ, Phân tích hậu kỳ về tính năng tự hủy của thư
[24] YS Ma, MJ Harrold, và YR Kwon, Đánh giá thử nghiệm đột biến cho
viện multi-sig chẵn lẻ, https://www.parity.io/a-postmortemon the-
parity-multi-sig-library-self-destroy/, 2017. các chương trình hướng đối tượng, được trình bày tại 28th Int.
[7] B. Chuỗi, mã nguồn hợp đồng mã thông báo BEC, https://etherscan.io/ Conf. Kỹ thuật phần mềm, Thượng Hải, Trung Quốc,
address/0xc5d105e63711398af9bbff092d4b6769 2006.
c82f793d#hợp đồng, 2018. [25] SW Kim, JA Clark và JA Mcdermid, Đánh giá mức độ thỏa đáng của bộ
[8] S. Kalra, S. Goel, M. Dhawan, và S. Sharma, ZEUS: Phân tích tính an kiểm tra cho các chương trình hướng đối tượng bằng cách sử dụng
toàn của hợp đồng thông minh, trong Network and Distributed System biến đổi lớp, được trình bày tại Symp. Lớp đột biến, York, Anh,
2016.
Security Symp., San Diego, CA, USA, doi: 10.14722/ndss . 2018.23092.
[26] SW Kim, JA Clark và JA Mcdermid, Đột biến lớp: thử nghiệm đột biến
[9] H. Wu, X. Wang, J. Xu, W. Zou, L. Zhang và Z. Chen, Thử nghiệm đột cho các chương trình hướng đối tượng, trong Proc. Conf.
biến cho hợp đồng thông minh ethereum, bản in trước arXiv arXiv : Hệ thống phần mềm hướng đối tượng, Erfurt, Đức, 2000.
1908.03707, 2019. [27] K. Claessen và J. Hughes, QuickCheck: Một công cụ nhẹ để kiểm tra
[10] GitHub, https://github.com/SmartcontractTest, 2020. ngẫu nhiên các chương trình Haskell, ACM SIGPLAN Not., tập. 46,
[11] N. Szabo, Hợp đồng thông minh: Khối xây dựng cho thị trường kỹ không. 4, trang 268–
279, 2000.
thuật số, https://kameir.com/smart-contracts/, 1996. [28] D. Le, MA Alipour, R. Gopinath và A. Groce, MuCheck: Một công cụ
[12] Y. Jia và M. Harman, Một phân tích và khảo sát về sự phát triển có thể mở rộng để kiểm tra đột biến của các chương trình haskell,
của thử nghiệm đột biến, IEEE Trans. Phần mềm Eng., vol. 37, trong Proc. 2014 quốc tế Triệu chứng Kiểm thử và Phân tích Phần
[13] RA DeMillo, RJ Lipton và FG Sayward, Gợi ý về lựa chọn dữ liệu thử [29] L. Deng, N. Mirzaei, P. Ammann và J. Offutt, Hướng tới phân tích
nghiệm: Trợ giúp cho lập trình viên thực hành, Máy tính, tập. 11, đột biến của các ứng dụng Android, trong Proc. Quốc tế thứ 8 Conf.
[14] AJ Offutt, Điều tra về hiệu ứng liên kết thử nghiệm phần mềm, ACM Áo, 2015.
´
Trans. Phần mềm Eng. Phương pháp., tập. 1, không. 1, trang 3–
18, [30] K. Moran, M. Tufano, C. Bernal-Cardenas, M. Linares- Vasquez, G.
´
1992. Bavota, C. Vendome, MD Penta và D.
[15] R. Ma, S. Ren, K. Ma, C. Hu và J. Xue, Tạo trường hợp thử nghiệm Poshyvanyk, MDroid+: Khung thử nghiệm đột biến dành cho
fuzz bán hợp lệ cho giao thức mạng có trạng thái, Khoa học và Công Android, trong Proc. 2018 IEEE/ACM lần thứ 40 Conf. Công
nghệ Thanh Hoa, tập. 22, không. 5, trang 458–
468 , 2017. nghệ phần mềm : Đồng hành (ICSE-Companion), Gothenburg,
Thụy Điển, 2018.
[16] LM Zhang, T. Xie, L. Zhang, N. Tillmann, J. De Halleux và H. Mei, [31] S. Mirshokraie, A. Mesbah, và K. Pattabiraman, Thử nghiệm đột biến
Tạo thử nghiệm thông qua thực thi ký hiệu động để thử nghiệm đột có hướng dẫn cho các ứng dụng web JavaScript, IEEE Trans. mềmw.
biến, trong Proc. 2010 IEEE Int. Conf. Bảo trì phần mềm , Anh, tập. 41, không. 5, trang 429–444, 2015.
Timisoara, Romania, 2010. [32] J. Chen, H. Wang, D. Towey, C. Mao, R. Huang và Y. Zhan, Cách tiếp
[17] MC S·nchez, JMC de Gea, JL Fern·ndez-Alem·n, J. Garceran và AT cận đột biến đầu vào tồi tệ nhất để kiểm tra lỗ hổng dịch vụ web
S·nchez. Tổng quan về lỗ hổng phần mềm: Một nghiên cứu mô tả, dựa trên thông báo SOAP, Khoa học và Công nghệ Thanh Hoa, tập.
Khoa học và Công nghệ Thanh Hoa, tập. 25, không. 2, trang 270– 19, không. 5, trang 429–441, 2014.
280, 2020. [33] ZX Li, HR Wu, JH Xu, XY Wang, LM Zhang và ZY Chen, MuSC:
[18] WE Wong và AP Mathur, Giảm chi phí thử nghiệm đột biến: Một nghiên Một công cụ để thử nghiệm đột biến của hợp đồng thông
cứu thực nghiệm, J . hệ thống. Softw., vol. 31, không. 3, trang minh ethereum, trong Proc. Lần thứ 34 IEEE/ACM Int. Conf.
185–
196, 1995. Kỹ thuật phần mềm tự động (ASE), San Diego, CA, USA, 2019.
[19] PG Frankl, SN Weiss, và C. Hu, Thử nghiệm mọi công dụng và đột
biến : So sánh thử nghiệm về hiệu quả, J. Syst. Softw., vol. 38, [34] P. Hartel và R. Schumi, Thử nghiệm đột biến của hợp đồng thông minh
không. 3, trang 235–253, 1997. theo tỷ lệ, arXiv in sẵn arXiv: 1909.12563, 2019.
Machine Translated by Google
40 Khoa học và Công nghệ Thanh Hoa, tháng 2 năm 2022, 27(1): 27–
40
[35] E. Andesta, F. Faghih và M. Fooladgar, Thử nghiệm các hợp đồng [42] PC Zhang, F. Xiao và XP Luo, SolidityCheck: Nhanh chóng phát hiện
thông minh trở nên thông minh hơn, arXiv bản in trước arXiv: các vấn đề về hợp đồng thông minh thông qua các biểu thức chính
1912.04780, 2019. quy, arXiv preprint arXiv: 1911.09425v1, 2019.
[36] L. Luu, DH Chu, H. Olickel, P. Saxena, và A. Hobor, Làm [43] J. Feist, G. Grieco và A. Groce, Slither: Khung phân tích
cho hợp đồng thông minh trở nên thông minh hơn, trong tĩnh cho hợp đồng thông minh, trong Proc. 2019 IEEE/ACM
Proc. Hội nghị ACM SIGSAC 2016 An ninh máy tính và truyền lần thứ 2 Hội thảo về Xu hướng mới nổi trong Kỹ thuật phần
thông, Viên, Áo, 2016. mềm cho chuỗi khối (WETSEB), Montreal, Canada, 2019.
¨
[37] CF Torres, J. Schutte, và R. State, Osiris: Săn lùng lỗi số
nguyên trong hợp đồng thông minh ethereum, trong Proc. 34th Ann. [44] T. Durieux, JF Ferreira, R. Abreu và P. Cruz, Đánh giá thực nghiệm
Ứng dụng bảo mật máy tính Conf. (ACSAC), San Juan, PR, Hoa Kỳ, các công cụ phân tích tự động trên 47587 Hợp đồng thông minh
Lavaud, Xác minh chính thức hợp đồng thông minh: Bài viết đồng thông minh để phát hiện lỗ hổng, được trình bày tại
ngắn, trong Proc. 34th Ann. Ứng dụng bảo mật máy tính IEEE/ACM Int lần thứ 33 năm 2018. Conf. Kỹ thuật phần mềm
Conf. (ACSAC'18), San Juan, PR, Hoa Kỳ, 2016. tự động (ASE), Montpellier, Pháp, 2018.
[39] Y. Hirai, Xác minh chính thức hợp đồng Chứng thư trong dịch vụ tên [46] HJ Wang, Y. Li, SW Lin, C. Artho, L. Ma, và Y.
Ethereum, https://yoichihirai.com/deed.pdf, 2016. Liu, thế hệ khai thác động được Oracle hỗ trợ cho các hợp đồng
[40] P. Tsankov, A. Dan, D. D. Cohen, A. Gervais, F. Buenzli và M. thông minh, bản in trước arXiv arXiv: 1909.06605, 2019.
Vechev, Securify: Phân tích bảo mật thực tế của các hợp đồng thông [47] C. Liu, H. Liu, Z. Cao, Z. Chen, BD Chen và B. Roscoe,
minh , bản in trước của arXiv arXiv: 1806.01143, 2018. ReGuard: Tìm lỗi tái đăng ký trong hợp đồng thông minh,
[41] S. Tikhomirov, E. Voskresenskaya, I. Ivanitskiy, R. trong Proc. ACM/IEEE lần thứ 40 Conf. Kỹ thuật phần mềm,
Takhaviev, E. Marchenko và Y. Alexandrov, SmartCheck: Phân Gothenburg, Thụy Điển, 2018, trang 65–68.
tích tĩnh các hợp đồng thông minh ethereum, trong Proc. [48] CVE-2018-10299, https://nvd.nist.gov/vuln/detail/CVE 2018-10299,
2018 IEEE/ACM 1st Int. Hội thảo về Xu hướng mới nổi trong 2018.
Kỹ thuật phần mềm cho Chuỗi khối (WETSEB), Gothenburg, [49] sec-bit, https://github.com/sec-bit/awesome-buggy-erc20-
Jinlei Sun nhận bằng Cử nhân toán học và Tingyong Wang đã nhận bằng cử nhân vào năm 2019.
toán học ứng dụng của Đại học Nam Xương Anh ấy hiện đang theo học thạc sĩ tại Đại học
năm 2016 và bằng Thạc sĩ Kỹ thuật phần mềm Kỹ thuật Quân đội PLA. Mối quan tâm nghiên cứu
của Đại học Kỹ thuật Quân đội PLA năm 2018. của anh ấy là trong lĩnh vực xử lý ngôn ngữ tự
lĩnh vực thử nghiệm biến chất, thử nghiệm GUI và thử nghiệm đột biến.
Cheng Zong nhận bằng Cử nhân kỹ thuật điện
và bằng Thạc sĩ Kỹ thuật điều khiển tại
Đại học Đông Nam, Nam Kinh, Trung Quốc,
Changyou Zheng đã nhận bằng tiến sĩ về thông
lần lượt vào năm 2008 và 2014. Anh ấy hiện
tin quân sự tại Đại học Khoa học và Công nghệ
đang theo học bằng Tiến sĩ về kỹ thuật
PLA vào năm 2013. Anh ấy hiện là giáo viên tại
phần mềm tại Đại học Kỹ thuật Quân đội
Đại học Kỹ thuật Quân đội của PLA. Mối quan tâm
PLA. Anh hiện đang làm việc tại Tập đoàn
nghiên cứu của ông là trong lĩnh vực kiểm thử
Điện hạt nhân Giang Tô. Nghiên cứu sở
phần mềm và chuỗi khối.
thích của ông là trong lĩnh vực khai thác dữ liệu, kiểm soát
công nghiệp và phân tích lỗi.
Song Huang nhận bằng Tiến sĩ tại Đại học Zhanwei Hui nhận bằng tiến sĩ tại Đại học Khoa
Khoa học và Công nghệ PLA năm 2002. Ông là học và Công nghệ PLA vào năm 2015. Ông hiện đang
thành viên của CCF làm việc tại Viện Nghiên cứu Đánh giá và Đánh
và ACM. Ông hiện là giáo sư kỹ thuật phần giá, Học viện Khoa học Quân sự. Nghiên cứu sở
mềm tại Trung tâm Kiểm tra và Đánh giá thích của ông là trong lĩnh vực thử nghiệm biến