CHƯƠNG 2. CƠ SỞ LÝ THUYET
2.6.2. Đồ thi luồng điều khiển
Đồ thị luồng điều khiển (Control-flow graph) và đồ thị lời gọi hàm (call graph) đại diện cho các luồng thực thi mã phần mềm và các quan hệ cuộc gọi. Biểu đồ luồng điều khiển mô tả các tất cả các trình tự có thể có của các câu lệnh hoặc dòng mã có thể được duyệt qua trong một hàm trong quá trình thực thi chương trình. Ngược lại, một đồ thị cuộc gọi (call graph) biểu diễn mọi quan hệ cuộc gọi có thể có giữa các hàm trong một chương trình.
Đồ thị luồng điều khiển là một biểu đồ đại diện cho luồng điều khiển của một chương trình. No biểu thị cấu trúc của chương trình, các rẽ nhánh (branching),
vòng lặp (loop) và thứ tự thực thi các câu lệnh. CFG được tạo thành bằng cách chia nhỏ mã nguồn thành các khối cơ bản (như khối câu lệnh, điều kiện
rẽ nhánh,...) và các khối này đại diện cho một bước thực thi duy nhất trong chương trình, được kết nối thong qua các edge. Nghĩa là, trong một CFG thi các node đại diện cho các khối cơ bản và các edge đại diện cho các điều kiện và
quyết định luồng điều khiển. Vì vậy mà CFG có thể cung cấp một cái nhìn tổng quan về đường đi thực thi và các điểm cuối của chương trình, nó cũng hữu ích trong việc phân tích lỗi và tối ưu hoá kiểm tra chương trình. Hình 2.10 là một
ví dụ minh hoạ cho đồ thị luồng điều khiển
31
Node type: IF
Expression:
addressCetherStore).ba lance.
>= 10000000000
__ ⁄ Sw
( Node Type:
Node Type: Expression \ End_IF
Expression: Qq
etherStore.withdraudk)
Hình 2.10: Minh hoa đồ thị luồng điều khiển trong Solidity
2.6.3. Graph Convolutional Network
Graph Convolutional Network (GCN) thuộc loại mô hình của Graph Neural
Network (GNN), được thiết kế nhằm xử ly dữ liệu đồ thi. GCN được phát triển với mục đích học hỏi biểu diễn đặc trưng của các node dựa trên thông tin cấu
trúc của đồ thị đó. GƠN hoạt động thông qua việc hợp nhất các thông tin từ
các node lân cận để tạo ra đặc trưng cho mỗi node trong đồ thị. Mỗi tầng trong GCN thực hiện hai quy trình chính: tổng hợp thông tin (pooling) và cập nhật
đặc trưng.
e Tổng hợp thông tin: nó tính toán tổng hợp các đặc trưng của node lân cận
và chính node đang xét. Thường thì sẽ sử dụng một phép tổng hợp đơn giản
để lấy trung bình hoặc tổng của các node lân cận
e Cập nhật đặc trưng: nó thực hiện một bước cập nhật để tính toán đặc trưng
mới cho node. Bước này sẽ sử dụng một hàm kích hoạt (activation function)
phi tuyến để tạo ra biểu diễn mới
32
Điều quan trọng là các node trong GCN sẽ có các biểu diễn khác nhau ở mỗi
layer. Ví dụ như ở layer 0 thì nó sẽ giống đặc trưng của node. Nhưng ở layer thứ
k thì biểu diễn của một node phải tính toán bằng cách đi qua các node lân cạn của nó, lấy biểu diễn của nó từ layer k-1 trước đó và tính trung bình cộng của chúng. Sau đó sẽ biến đổi chúng bằng cách sử dụng ma trận tham số và thêm vào các thông tin riêng của từng node k-1. Giá trị kết quả sẽ được chuyển qua
một hàm phi tuyến tính như ReLU.
Mô hình GCN đã được áp dụng thành công trong nhiều nhiệm vụ trên đồ
thị, nó cho phép mô hình học được biểu diễn đặc trưng phụ thuộc vào ngữ cảnh
và mối quan hệ giữa các node trong đồ thị
2.7. Các công trình nghiên cứu liên quan
Tann [20] và các cộng sự sử dụng phương phấp học trình tự (sequence learning)
để phát hiện các 16 hong trong opcode của Smart Contract. Bài viết này sử dụng one-hot encoding và một ma trận embedding để biểu diễn opcode của Smart Contract. Các code vector thu được sẽ được sử dụng làm đầu vào (input) dé
huấn luyện mô hình LSTM cho việc xác định xem Smart Contract đó có dé bi tấn công hay không. Sun [19]va các cộng sự đã đề xuất một phương pháp dựa
trên mô hình CNN kết hợp với cơ chế attention để phát hiện lỗ hồng trong Smart
Contract. Các phương pháp này sở hữu khả năng khái quát hoá vượt trội, cho
phép chúng học các đặc điểm cấu trúc phức tạp từ dữ liệu tranining và nắm bắt các mẫu một cách hiệu quả. Do CNN được thiết kế đặc biệt để xử lý dữ liệu hai chiều nên nó phù hợp để phân tích biểu diễn có cấu trúc của mã Smart
Contract và nó vượt trội trong việc phát hiện tính năng cục bộ thông qua các
lớp tích chập (convolutional layers), cho phép họ tập trung vào các đoạn code
quan trọng và xác định các lỗ hồng một cách hiệu quả. Tuy nhiên thì nó vẫn
còn một số hạn chế liên quan đến việc CNN cần input có kích thước cố định,
33
điều này đặt ra các thách thức khi xử lý các Smart Contract có độ dài khác
nhau. Ngoài ra, CNN không giữ lại thông tin trình tự, khó có thể hiểu thứ tự câu lệnh và cấu trúc của Smart Contract tổng thể. Còn một hạn chế của CNN
là yêu cầu một lượng lớn dit liệu đào tao do CNN cần học các tính năng phức
tạp và tránh overfitting.
Qian [14| và các cộng sự đã đề xuất một cách tiếp cần mới để phát hiện tự động lỗ hổng reentrancy trong Smart Contract bằng cách sử dụng mô hình tuần
tự (sequential model). Các mô hình tuần tự như RNN và LSTM mang lại một
số lợi thế trong việc phát hiện các lỗ hong reentrancy. Thứ nhất thì các mô hình này có thể nắm bắt các phụ thuộc tạm thời và thứ tự các operations trong Smart
Contract, cho phép chúng xác định các kịch bản của reentrancy tiềm năng liên quan tới lệnh gọi hàm đệ quy. cung cấp một phân tích toàn diện hơn so với các
kỹ thuật phân tích tĩnh. Thứ hai, các mô hình tuần tự này có thể xử lý các chuỗi đầu vào có độ dài thay đổi, phù hợp với tính chất động và độ dài của Smart
Contract. Mặc dù vậy thì nó vẫn có hạn chế nhất định khi áp dụng mô hình
tuần tự để phát hiện lỗ hong reentrancy. Một thách thức là cần có dit liệu đào tạo đáng kể để đào tạo các mô hình hiệu quả. Ngoài ra nó có thể gặp khó khăn trong việc nắm bắt các mẫu reentrancy phức tạp hơn và phát hiện các biến thé tỉnh vi của các cuộc tấn công phát triển theo thời gian. Tóm lại thì việc sử dụng các mô hình tuần tự trong bài báo trình bày một cách tiếp cận đầy hứa hẹn để
phát hiện tự động quay lại trong các hợp đồng thông minh. Bằng cách tận dụng
các yếu tố phụ thuộc tạm thời và thứ tự hoạt động, các mô hình này giúp hiểu
rõ hơn về các lỗ hồng reentrancy. Do đó, những thách thức trong việc thu thập
dữ liệu đào tạo và nắm bắt các mẫu reentrancy phức tạp nên được xem xét khi
sử dụng các mô hình tuần tự. Mô hình BLSTM-ATT này và một số mô hình
khác đã được nhóm khảo sát và mô tả trong bảng 2.2
Bidirectional Encoder Representations from Transformers (BERT) [2| bao
gồm một bộ multi-layered Tranformer Eneoder và đã rất thành công trong nhiều
34
lĩnh vực xử lý ngôn ngữ tự nhiên. Đặc biệt nhiều nhà nghiên cứu đã sử dụng BERT để phân tích mã nguồn [4]. Hơn nữa Jeon [9] và các cộng sự đã đề xuất một
cơ chế phát hiện lỗ hong trong mã nguồn Smart Contract, dựa trên sự kết hợp của
mô hình ngôn ngữ BERT và các kỹ thuật machine learning - SmartConDetect.
Mô hình này trích xuất các code gadgets và tận dụng BERT để phát hiện lỗ hổng của các chương trình Solidity một cách hiệu quả. SmartConDetect là một
phương pháp tiếp cận dựa trên tính tương tự giữa các đoạn mã thông qua
biểu diễn trừu tường từ quá trình tokenizer. Đầu tiên thì tác giả trích xuất
các function từ mã Solidity và gan nhãn dựa vào Smartcheck, tao ra các code
gadgets và mã hoá nó bằng cách tập hợp các function đã được trích xuất. Đào tạo SmartConDetect bằng BERT và đưa ra các báo cáo phát hiện dưới dạng
JSON với các lỗ hong và function tương ứng. Kết quả cho thấy SmartConDetect
so với các phương pháp tiên tiến khác, tuy nhiên nó còn hạn chế trong việc phát
hiện một số loại lỗ hổng với các cú pháp Solidity bị ngắn.
Hazim Hanif [7] và các cộng sự đã đề xuất một phương pháp mới được lấy
cảm hứng từ kiển trúc Transformer, sử dụng mô hình VulBERTa cho phát hiện
lỗ hồng bảo mật trong mã nguồn. Mô hình này sẽ tập trung vào việc đơn giản hoá quá trình huấn luyện mô hình BERT, sử dụng kỹ thuật Pre-train để học kiến thức biểu diễn chuyên sâu về cú pháp, ngữ nghĩa và sẽ tận dụng để đào tạo các bộ phân loại phát hiện lỗ hổng. Các mã nguồn được lấy từ nhiều dự
án phần mềm khác nhau và được phân tích thông qua một quy trình token hoá đáng tin cậy (custom tokeniser kết hợp BPE), đảm bảo thông tin cơ bản nhưng van đủ quan trọng được cung cấp cho mô hình. Đồng thời, tác giả còn đề xuất
phương pháp xây dựng thông qua Masked Language Modelling (MLM) để giảm
kích thước dữ liệu và số lượng tham số của mô hình mà vẫn đảm bảo độ chính
xác và độ tin cậy. Với việc đào tạo trước như vậy giúp cho mô hình có khả năng
chuyển giao các trọng số nhúng (embedding weights) và được tái sử dụng trong
các kiến trúc ít phức tạp hơn như MLP và CNN. Mặc dù kết quả cao nhưng mô
39
hình vẫn còn một số hạn chế như bộ dữ liệu phát hiện lỗ hồng trong khi kiểm tra thủ công cho thấy nhãn không chính xác. Mặc dù DL có khả năng phục hoi
để chống nhiễu trong quá trình đào tạo nhưng nó vẫn làm giảm hiệu suất. Tác
giả của mô hình còn cho biết nguồn lực còn hạn chế và chưa khám phá các kết
hợp và mô hình lớn hơn để nâng cao hiệu suất.
Guo [6] và các cộng sự đã đề xuất một mô hình mã nguồn mới được đào
tạo trước trên dữ liệu mã nguồn và sử dụng đồ thị để biểu diễn mã nguồn
- GraphCodeBERT. Sau đó, mô hình được tinh chỉnh (fine-tuning) trên các
nhiệm vụ cụ thể để tăng độ chính xác trong việc phân loại và phát hiện lỗ hổng
trong mã nguồn. Thay vì sử dụng cú pháp trừu tượng (AST), thì tác giả bài
báo đề xuất sử dụng thông tin mã cấp ngữ nghĩa - data flow để đào tạo trước.
Data flow này là một graph, nó ít phức tạp hơn và không bị hệ thống phân cấp sâu không cần thiết, thuộc tính giúp mô hình hiệu quả hơn. Các phương pháp đào tạo trước được đề xuất trong bài báo sử dụng nhiêm vụ dự đooán
các data flow edges để học biểu dién từ cấu trúc mã và căn chỉnh thay đổi trên
mã nguồn và data flow để căn chỉnh biểu diễn giữa mã nguồn và cấu trúc mã.
GraphCodeBERT dựa trên kiến trúc Transformer và mở rộng bằng cách graph-
guided masked attention function để kết hợp cấu trúc mã. Kết quả nghiên cứu
cho thấy việc áp dụng data flow trong mô hình được đào tạo trước sẽ cải thiện
khả năng hiểu mã tốt hơn và mô hình đạt được hiệu suất cao trong việc phát hiện lỗ hồng.
Nhưng BERT vẫn có những nhược điểm như kích thước lớn và tài nguyên tính toán cao, tốc độ chậm, khả năng truyền thống hạn chế và không có khả
năng xử lý các từ mới. Nhờ đó ma DistilBERT [17] đã thể hiện được ưu điểm
là một mô hình Transformer nhỏ, nhanh, rẻ và nhẹ dựa trên kiến trúc BERT.
Việc chat lọc kiến thức được thực hiện trong giai đoạn Pre-training để giảm 40% kích thước của mô hình BERT. Với BERT, nhóm có thể cải thiện tỷ lệ chính xác dự đoán lỗ hổng của hợp đồng thông minh. Dựa trên những ưu điểm của
36
Bảng 2.1: Bảng kết qua đánh giá các mô hành
Phương pháp | Micro-R (%) | Micro-P (%) | Micro-F1 (%) | Accuracy (%)
RNN 83,3% 70,7% 76,5% 73,9%
LSTM 67,3% 76,3% 71,5% 74,3%
Bi-LSTM 70,7% 79,8% 74,9% 76,2%
LSTM-ATT 79,7% 81,7% 80,7% 80,7%
TextONN [1] 67,1% 71,9% 72,1% 71,0%
WBL-ATT (15) | 87,3% 87,7% 87,5% 88,1%
DistilBERT so với BERT, nhóm đã quyết định sử dụng các mô hình mã hóa
(DistiIBERT) để triển khai mô hình phát hiện lỗ hong tùy chỉnh cho các hợp
đồng thông minh.
Phát hiện lỗ hồng của Smart Contract là một nhiệm vụ đầy thách thức và làm cách nào để xây dựng một mô hình DL duy nhất để phát hiện nhiều loại
lỗ hong bảo mật. Có hai thuật toán phan loại là binary và multi-label. Một bộ phân loại binary chỉ có thể phân loại dữ liệu là có lỗ hồng hoặc không có lỗ hồng, tích cực hoặc tiêu cực, đúng hoặc sai. Không giống như phân loại binary,
bộ phân loại multi-label chỉ định hoặc gắn nhiều nhãn dữ liệu cho từng mẫu dữ
liệu. Để xác minh tính hiệu quả của mô hình được đề xuất bởi đề tài thì nhóm
đã tham khảo và có được kết quả của việc phân loại multi-label với các nghiên cứu sử dung DL. Kết quả đánhh giá được Shenyi Qia [15] và các cộng sự đã
khảo sát trên cùng một bộ dataset và được thể hiện trong bảng 2.1. Mô hình khảo sát trên 5 loại 16 hổng là Reentrancy, IntegerOverflow, IntegerOverflow,
TOD, Timestamp Dependency với tệp dataset gồm 5290 Smart Contract được
xác thực gồm các loại lỗ hong và xây dựng gồm 1000 Smart Contract không chứa lỗ hồng để có thể đào tạo mô hình phát hiện tốt hơn. Kết quả khảo sát
cho thấy sử dụng mô hình BiLSTM có hiệu quả cao hơn trong việc trích xuất thông tin ngữ nghĩa giữa các mã Smart Contract. Ngoài ra thì các chỉ số của LSTM-ATT được cải thiện rất nhiều so với BiLSTM và nó chứng minh được
việc bổ sung cơ chế attention có thể làm cho mô hình cân bằng các đặc trưng
37
Bảng 2.2: Bảng khảo sát các mô hành hiện có
Mô hình Phương pháp/ kĩ thuật | Phân loại Ưu điểm Nhược điểm
ằ mye ne an cải thiện kỹ thuật embeddi
Có thể xác định lỗ hong ở cấp độ Can Can ĐHỆP Xỹ Phuậy embecang
GCN binar chỉ tiết cấp dòng và cấp hợp đồn thêm các thuộc tính ngữ nghĩa hơn
MANDO [13] Call Graph + y ate là oe Pp °P š 5 của Smart Contract chẳng hạn
(7 loại) với kết quả vượt trội so với các ca CA ack
Control-flow graph hương pháp trước như data denpendencies và điều
P 8 Paap chỉnh các GNN mới và phức tạp hon
Mô hình sử dụng crucial data-flow
Pre-training (sử dụng graph ít phức tạp hơn và không
BERT và Transformer) binar mang lại hệ thống phân tích sâu Hiệu suất phụ thuộc vào việc
Peculiar [24] Graph-guided masked y không cần thiết, giúp mô hình gan nhãn thủ công và mô hình
: (reentrancy) xây R Cae ye, pen ae
attention Data-flow graph dé dang tập trung vào các đặc chỉ phát hiện 16 hong reentrancy + Crucial Data-flow graph trưng quan trọng, tránh được tình
trạng overfitting GNN (Interpretable Graph binary Mo hình sử dụng các expert m oo
feature va Expert (3 - reentrancy, attern giúp đóng sóp thông tin local Kho khăn trong việc biểu diễn
AME [11] Pattern Fusion) Timestamp p chính ao có Hà trị và số chế biết đồ thị ngữ nghĩa do các hàm
Control-flow + dependency, 8 ` khác nhau trong các Smart Contract
Data-flow graph Infinite loop) weight của từng feature khác nhau
BLSTM-ATT [14] BLSTM-ATT binary
(reentraeny)
Mô hình này không chỉ có thể nắm bắt các phụ thuộc dài hạn trong quá khứ hoặc tương lai mà còn làm nổi bật điểm chính bằng cơ chế attentionm
giúp nắm bắt thông tin ngữ nghĩa
thiết yếu và kiểm soát các phụ
thuộc control-flow
Mô hình chỉ giới hạn trong
việc phát hiện được duy nhất
lỗ hong reentraney
SmartConDetect [9]
Pre-training (stt dung BERT ) SVM, Eth2Vec, DR-GCN
multi-label
(6 loai)
C6 thể phat hiện nhiều lỗ hổng khác nhau (23 loại) và có thể sử dụng
mô hình áp dụng cho nhiều ngôn ngữ khác bằng cách cung cấp vocabulary
cho nó
Mô hình dễ bị nhiễu do
cú pháp Solidity quá ngắn
ESCORT [12| LSTM
Tranfer learning
multi-label
(6 loai)
Mo hinh nay cho phép phat hién
nhiều loại lỗ hổng hiệu qua và có thé
mở rộng quy mô do mỗi nhánh của
DNN nắm bắt ngữ nghĩa của một lớp 16 hồng cu thể nên chỉ cần đào tạo một DNN duy nhất và khi mở rộng chỉ cần đào tạo nhánh mới đó.
lỗ hổng với cú pháp
Solidity ngắn
với số lượng mẫu nhỏ và có thể tập trung vào được các dữ liệu đặc trưng quan
trọng.
38