CHƯƠNG 4. THÍ NGHIỆM VÀ ĐÁNH GIÁ
4.4. Tiêu chí đánh giá kết quả
4.6.3. Quá trinh fine-tuning cho bài toán phát hiện da lỗ hổng
Quá trình fine-tuning là quá trình kết hợp mô hình tiền huần luyén (pre-
trained models) với các lớp phần loại (classifer layer) để phù hợp với tác vụ
phân loại lỗ hong. Dưới day là các lớp phân loại sử dung lần lượt các kỹ thuật
(MLP, LSTM, BiLSTM) cho tác vụ phân loại nhị phân với nhãn 0 là không có
lỗ hồng, nhãn 1 là có lỗ hồng:
Mô hình phân loại đã lỗ hong kết hợp pretrained DistiIBERT với MLP:
Listing 2 Lớp phan loại của mô hình tinh chỉnh (Fine-tuned models) với các lớp MLP
(pre_classifier): Linear(in features=/68, out_features=768,
= bias=True)
(dropout): Dropout(p=0.3, inplace=False)
(classifier): Linear(in_features=768, out_features=2,
ô bias=True)
Lớp phan loại sử dung MLP này bao gồm các thành phan sau:
e Linear(in-features=768, out-features=768, bias=True): Một tầng kết nối
đầy đủ (fully connected) với kích thước đầu vào là 768, kích thước đầu ra cũng là 768 và sử dụng hệ số điều chỉnh (bias).
e Dropout(p=0.1, inplace=False): Một tang dropout với xác suất dropout là
0.1. Tang dropout giúp ngăn chặn overfitting bằng cách tắt ngẫu nhiên một
64
"
số nơ-ron trong quá trình huấn luyện.
e Linear(in-features=768, out-features=2, bias=True): Tầng kết nối đầy đủ
cuối cùng với kích thước đầu vào là 768 và kích thước đầu ra là 2. Tầng này
sẽ xuất ra giá trị logit cho mỗi lớp, sau đó có thể được chuyển đổi thành
xác suất bằng cách sử dụng hàm softmax.
Mô hình phân loại đã lỗ hồng kết hợp pretrained DistiIBERT với LSTM:
Listing 3 Lớp phân loại của mô hình tinh chỉnh (Fine-tuned models) với các lớp LSTM
(bilstm1): LSTM(768, 256, num_layers=2, batch_first=True, 4+ bidirectional=False)
(pre_classifier): Linear(in_features=512, out_features=256,
+ bias=True) (dropout): Dropout (p=0.1, inplace=False) (classifier): Linear(in_features=256, out_features=2, s+ bias=True)
Lớp phân loại sử dung LSTM này bao gồm các thành phan sau:
e LSTM(768, 256, num-layers=2, batch-first= True, bidirectional=False): Một
tầng LSTM với kích thước đầu vào là 768, kích thước đầu ra là 256, số lượng
tầng là 2, đặt batch-first=True để biểu diễn dữ liệu đầu vào với kích thước
(batch-size, sequence-length, input-size) và bidirectional=False chỉ ra rằng tầng LSTM này không là hai chiều (unidirectional).
e Linear(in-features=512, out-features=256, bias=True): Một tang kết nối
day đủ (fully-connected) với kích thước đầu vào là 512, kích thước đầu ra
là 256 và sử dụng hệ số điều chỉnh (bias).
e Dropout(p=0.1, inplace=False): Một tang dropout với xác suất dropout là
0.1. Tầng dropout giúp ngăn chặn overfitting bằng cách tắt ngẫu nhiên một
số nơ-ron trong quá trình huấn luyện.
65
e Linear(in-features=256, out-features=2, bias=True): Tầng kết nối đầy đủ
cuối cùng với kích thước đầu vào là 256 và kích thước đầu ra là 2. Tầng này
sẽ xuất ra giá trị logit cho mỗi lớp, sau đó có thể được chuyển đổi thành
xác suất bằng cách sử dụng hàm softmax.
Mô hình phân loại đã lỗ hong kết hợp pretrained DistiIBERT với BiLSTM:
Listing 4 Lớp phân loại của mô hình tinh chỉnh (Fine-tuned models) với các lớp BiLSTM
(bilstm1): LSTM(768, 256, num_layers=2, batch_first=True,
+ bidirectional=True)
(pre_classifier): Linear(in_features=512, out_features=256,
4 bias=True)
(dropout): Dropout(p=0.1, inplace=False)
(classifier): Linear(in_features=256, out_features=2,
s+ bias=True)
Lớp phan loại sử dung BiLSTM này bao gồm các thành phan sau:
e LSTM(768, 256, num-layers=2, batch-first= True, bidirectional=True): Một
tầng LSTM hai chiều (bidirectional) với kích thước đầu vào là 768, kích
thước đầu ra là 256, số lượng tang là 2, và đặt batch-first—True để biểu
diễn dữ liệu đầu vào với kích thước (batch-size, sequence-length, input-size). LSTM hai chiều sẽ xử lý dữ liệu theo cả hai hướng (về phía trước và ngược lại), giúp nắm bắt ngữ cảnh tốt hơn.
e Linear(in-features=512, out-features=256, bias=True): Một tầng kết nối
day đủ (fully connected) với kích thước đầu vào là 512, kích thước đầu ra
là 256 và sử dụng hệ số điều chỉnh (bias).
e Dropout(p=0.1, inplace=False): Một tang dropout với xác suất dropout là
0.1. Tầng dropout giúp ngăn chặn overfitting bằng cách tắt ngẫu nhiên một
số nơ-ron trong quá trình huấn luyện.
66
e Linear(in-features=256, out-features=2, bias=True): Tầng kết nối đầy đủ
cuối cùng với kích thước đầu vào là 256 và kích thước đầu ra là 2. Tầng này
sẽ xuất ra giá trị logit cho mỗi lớp, sau đó có thể được chuyển đổi thành
xác suất bằng cách sử dụng hàm softmax.
Các lớp phân loại trên có thể được sử dụng trong các tác vụ phân loại văn
bản nhị phân. Đầu vào của lớp này sẽ là đầu ra của mô hình mã hóa ngôn ngữ DistilBERT và dau ra của lớp nay là logit cho mỗi lớp.
Lớp phân loại sử dụng BiLSTM cho tác vụ phân loại đa lỗ hồng:
Listing 5 Lớp phân loại của mô hình tinh chỉnh (Fine-tuned models) với các
lớp BiLSTM phân loại đa lỗ hong
(bi_lstm): LSTM(768, 256, num_layers=2, batch_first=True,
+ bidirectional=True)
(pre_classifier): Linear(in_features=512, out_features=256,
„ bias=True)
(dropout): Dropout(p=0.1, inplace=False)
(classifier): Linear(in_features=256, out_features=8,
+ bias=True)
e LSTM(768, 256, num-layers=2, batch-first=True, bidirectional=True): Một
tang LSTM hai chiều (bidirectional) với kích thước đầu vào là 768, kích
thước đầu ra là 256, số lượng tầng là 2, và đặt batch-first—True để biểu
diễn dữ liệu đầu vào với kích thước (batch-size, sequence-length, input-size). LSTM hai chiều sẽ xử lý dữ liệu theo cả hai hướng (về phía trước và ngược lại), giúp nắm bắt ngữ cảnh tốt hơn.
e Linear(in-features=512, out-features=256, bias=True): Một tầng kết nối
đầy đủ (fully connected) với kích thước đầu vào là 512, kích thước đầu ra
là 256 và sử dụng hệ số điều chỉnh (bias).
e Dropout(p=0.1, inplace=False): Một tầng dropout với xác suất dropout là
67
0.1. Tầng dropout giúp ngăn chặn overfitting bằng cách tắt ngẫu nhiên một
số nơ-ron trong quá trình huấn luyện.
e Linear(in-features=256, out-features=8, bias=True): Tầng kết nối đầy đủ
cuối cùng với kích thước đầu vào là 256 và kích thước đầu ra là 8.
4.6.4. Thực nghiệm 1,2,3
Huấn luyên mô hình phân loại đa nhãn trên tập dit liệu SmartBug Wild. Tập
dữ liệu SmartBug Wild có danh sách lỗ hồng bao gồm 8 loại lỗ hổng sau: access-
control, arithmetic, denial-service, front-running, reentrancy, time-manipulation,
unchecked-low-calls, other. Bang 4.4 mô ta kết qua thực nghiệm:
Bang 4.4: két qua thực nghiệm 1,2,3 trên các mô hành (source code)
DistiIBERT-MLP | DistiIBERT-LSTM | DistilBERT-BiLSTM pre | recall} fl pre | recall | fl pre | recall fl support
access_ control 0.77 | 0.03 | 0.06 | 0.92 | 0.10 | 0.18 | 0.00 | 0.00 0.00 734
arithmetic 0.85 | 0.96 | 0.90 | 0.85 | 0.99 | 0.92 | 0.92 | 0.94 | 0.93 7496 denial_ service 0.59 | 0.21 | 0.31 | 0.73 | 0.46 | 0.57 | 0.69 | 0.45 0.54 2493 front_ running 0.42 | 0.04 | 0.07 | 0.64 | 0.22 | 0.33 | 0.68 | 0.13 0.22 1544
reentrancy 0.71 | 0.37 | 0.48 | 0.78 10.43 | 0.56 | 0.78 | 0.46 0.58 2960 time_manipulation | 0.93 | 0.04 | 0.09 | 0.94 | 0.04 | 0.08 | 0.00 | 0.00 | 0.00 829
unchecked_low_calls | 0.73 | 0.49 | 0.59 | 0.88 | 0.47 | 0.62 | 0.86 | 0.48 0.62 2927
other 0.70 | 0.88 | 0.78 | 0.77 | 0.82 | 0.80 | 0.76 | 0.86 | 0.81 5636
micro avg 0.76 | 0.62 | 0.69 | 0.81 | 0.66 | 0.73 | 0.83 | 0.65 | 0.73 24619 macro avg 0.71 | 0.38 | 0.41 | 0.82 | 0.44 | 0.50 | 0.59 | 0.42 0.46 24619 weighted avg 0.73 | 0.62 | 0.62 | 0.81 | 0.66 | 0.69 | 0.76 | 0.65 | 0.68 24619 samples avg 0.74 | 0.64 | 0.65 | 0.80 | 0.68 | 0.70 | 0.76 | 0.66 | 0.68 24619
Mô tả kết qua: Mô hình phân loại lỗ hong trong Smart Contract được nhóm
thực hiện và đánh giá kết quả trên ba mô hình khác nhau. Từ bảng kết quả
4.4 cho thấy mô hình phân loại lỗ hồng của DistilBERT-BiLSTM có kết quả
tốt nhất về fl-score so với mô hình DistilBERT-MLP và DistilBERT-LSTM
(93% với lỗ hong arithmetic). Tuy nhiên, điểm trung bình đánh giá trên nhiều loại lỗ hổng của mô hình DistiIBERTBiLSTM (macro-avg fl-score 46%)còn
thấp hơn mô hình DistilBERTLSTM (macro-avg fl-score 50%)vì đối với lỗ
68
hổng access_ control và time manipulation thì mô hình còn hạn chế. Ngoài
ra ta thấy đối với cả ba mô hình có thể phát hiện tốt các lỗ hổng arithmetic, unchecked_low_ calls và other. Nhưng đối với các lỗ hong như acces_ control, time_ manipulation có điểm precision cao (94% DistiIBERT-LSTM) nhưng có điểm recall và fl-score thấp (4%) chỉ ra điểm yếu của mô hình có khả năng phân loại chính xác các 16 hong được xác thực là positive nhưng có xu hướng bỏ sót một số lỗ hổng thực tế
4.6.5. Thực nghiệm 4
Huấn luyện mô hình DistiIBERT-BiLSTM phân loại đa nhãn trên tập dữ
liệu Hugging Face, bao gồm các lỗ hong: arithmetic, other, reentrancy, safe,
uncheck-call và access-control. Bang 4.5 mô tả kết quả thực nghiệm
Mô tả kết quả: Từ bảng kết quả 4.5 cho thấy mô hình DistilIBERT-BiLSTM
có kết quả phát hiện lỗ hong access-control tốt nhất với 82% điểm precision. Đồng thời mô hình cũng có kết quả phát hiện lỗ hổng uncheck-call tốt với 80%
điểm precision
4.6.6. Thực nghiém 5,6,7,8
Phân loại nhị phan trên tập dữ liệu SmartBug Wild và Hugging Face.
Mô tả kết quả: Đối với tác vụ phân loại nhị phan lỗ hồng reentrancy trong
bang 4.6 cho thấy mô hình DistilBERT-LSTM hoạt động tốt hơn (88,38% Recall)
mô hình DistilBERT-MLP (76,68%) trên cả hai tập dữ liệu và nó hoạt động tốt
nhất trên bộ dữ hiệu HuggingFace với 87,2% F1-score
4.6.7. Thực nghiệm 9,10,11
Bảng 4.7 mô tả kết quả thực nghiệm của mô hình DisitlBERT kết hợp (MLP,
LSTM, BiLSTM) trên từng hàm của Smart Contract. Mô hình được tỉnh chỉnh
69
Bảng 4.5: Kết quả thực nghiệm 4 trên mô hình DistiIBERT-BiLSTM (source
code)
DistilBERT- BiLSTM | precision | recall | fl-score | support
arithmetic 80% 14% 24% 2346
other 66% 26% 37% 2715 reentrancy 59% 35% 44% 4209
safe 83% 53% 65% 4846 uncheck-call 80% 68% 74% 5422
access-control 82% 73% | 77% 7289
micro avg 77% 53% | 63% | 26827 macro avg 75% 45% 53% 26827 weighted avg 76% 53% 60% 26827 samples avg 62% 56% 57% 26827
Bang 4.6: Kết qua thúc nghiệm phân loại nhị phân trên toàn bộ ma nguồn
Dataset 'W 2 Acc Pre] H Recall
HuggingFace `. 79.05% | 78.45% | 77.55% | 76.68%
ete —. 87.76% | 86.06% | 87.20% | 88.38%
SmartBugsWilds TP 81.09% | 70.59% | 63.42% | 57.58%
ơ.— 85.48% | 77.73% | 72.53% | 67.99%
dang phân loại nhị phan với nhãn là 0/1. Hình 4.4 mô tả biển đồ giá tri loss và
chỉ số accuracy theo từng epoch.
70
Bang 4.7: Kết quả thuc nghiệm phân loại nhị phân trên từng ham
Tập dữ liệu | Mô hình | Accuracy | Precision | Recall | E1 score
SmartBug | DSHBERTL go 82% 41% 54%
MLP
Wild eri 89% 81% 58% 68%
DistiIBERT
BiLSTM 91% 84% 70% 76%
4.7. Mo hình phát hiện dựa trên Graph
4.7.1. Quy trành mâu dựng đồ thà CFG
Sử dụng tập dữ liệu SmartBugs Will, nhóm thực hiện trích xuất các Đồ thị luồng điều khiển tương ứng với các hàm trong Smart Contract. Sử dụng về vị trí chính xác của 16 hong được cung cấp trong tập dữ liệu để gán nhãn cho các
đồ thị. Nhãn 0 tương ứng với đồ thị không chứa 16 hong. Nhãn 1 tương ứng với
đồ thì có chứa 16 hồng.
Dữ liệu của đồ thị được xây dựng sử dụng thư viện pytorch-geometric. Các thành phần của đồ thị bao gồm: ma trận giá trị của các nút trong đồ thì - bao
gồm các onehot vec-tơ, được chuyển đổi dựa trên loại nút của đồ thì CFG (được
mô tả trên phần 3); Ma trận liền kề biểu diễn
4.7.2. Huấn luyện mô hinh uới GCN
Trường hợp 1: Mô hình GCN thực nghiệm với CFG có giá trị nút là các
onehot-vector biểu diễn cho từng loại nút.
Trường hợp 2: Mô hình GCN thực nghiệm với CFG có giá trị nút là các vector nhúng của nút qua mô hình pre-trained DistilBERT.
e GCNConv(17, 64): Lớp đầu tiên của mang GCN, gọi là conv_layerl. Dây
là một lớp GCNConv với số lượng đặc trưng đầu vào là 17 và số lượng đặc
71
Training Loss Training acc Testing acc Testing Loss
Loss/acc
2 4 6 8 10
Epoch
Hình 4.4: Loss and accuracy mô hành DistiIBERT-BiLSTM (SmartBug Wild)
trưng dau ra là 64. GCNConv là một lớp tích chập trên đồ thi, nó cập nhật
đặc trưng của mỗi đỉnh dựa trên thông tin từ các đỉnh lân cận.
e GCNConv(64, 64): Lớp thứ hai của mang GCN, gọi là conv_ layer2. Tương
tự như convl, đây cũng là một lớp GCNConv với số lượng đặc trưng đầu vào là 64 và số lượng đặc trưng đầu ra là 64.
e GCNConv(64, 64): Lớp thứ ba của mang GCN, gọi là conv_layer3. Day
cũng là một lớp GCNConv với số lượng đặc trưng đầu vào là 64 và số lượng đặc trưng đầu ra là 64.
e Linear(in-features=64, out-features=2, bias=True): Lớp cuối cùng của mạng
GCN, gọi là lin. Day là một lớp Linear với số lượng đặc trưng đầu vào là
72
Listing 6 Các lớp trong mô hình GCN
GCN ¢
(conv_layer1): GCNConv(17, 64)
(conv_layer2): GCNConv(64, 64)
(conv_layer3): GCNConv(64, 64)
(lin): Linear(in_features=64, out_features=2, bias=True)
64 và số lượng đặc trưng đầu ra là 2. Lớp này chủ yếu dùng dé chuyển đổi
đặc trưng của đỉnh đã được cập nhật từ các lớp GCNConv trước đó thành dau ra cuôi cùng.
Mang GCN này có 3 lớp tích chập trên đồ thị (GCNConv) và một lớp kết nối
đầy đủ (Linear) để ánh xạ đặc trưng đỉnh đến đâu ra là 0 (nhãn không chứa lỗ hồng), 1 (nhãn chứa lỗ hồng).
4.7.3. Thực nghiệm 12
Hình 4.5 mô tả kết quả thực nghiệm mô hình GCN trên dữ liệu được trích
xuất từ Control-flow Graph của Smart Contract. Với các giá trị nút được biểu diễn bằng one-hot vec-tơ cho từng loại nút của đồ thị. Đồ thì CFg tổng cộng có
17 loại nút, nên one-hot vec-tơ sẽ có chiều là 17. Chỉ số Accuracy của mô hình duy trì ở mức khoảng 80% qua các epochs. Các chỉ số Precision, Recall, F1 biến
đổi với biên động lớn, chưa ổn định. Tuy chỉ số Precision cao trên 80%. Nhung
chỉ số Recall lại thấp biến động trong khoảng 50%, cho thấy việc dit đoán các
hàm có lỗ hổng còn kém. F1 cho thấy giá trị trung bình điều hòa của Recall và
Precision. F1 có giá trị khoảng 60%. Kết quả cho thấy việc trích xuất dit liệu
với các nút được biểu diễn bằng one-hot vec-tơ chưa mang lại hiểu quả cao.
73
Training and Validation Loss
Hình 4.5: Kết qua mô hành GCN phan loại dựa trên đồ thi CFG (biểu diễn
onehot vec-to của nút)