Prompt: Đánh giá Rủi ro Bảo mật trong Mã Hợp đồng – Phân tích Hợp đồng Thông minh – AI Pháp lý & Hành chính

820
Chia sẻ
2k
Lượt xem
Mục lục

Tuyệt vời! Dưới đây là phân tích chi tiết về mẫu prompt bạn cung cấp, theo yêu cầu về cấu trúc và định dạng:

1. Phân tích Cấu trúc Prompt

Mẫu prompt này được thiết kế để yêu cầu mô hình ngôn ngữ thực hiện việc kiểm tra bảo mật trên mã nguồn của một hợp đồng thông minh. Cấu trúc của prompt bao gồm các thành phần chính sau:

  • Yêu cầu cốt lõi: “Kiểm tra mã nguồn của hợp đồng thông minh được cung cấp.” Đây là mệnh lệnh chính, chỉ rõ hành động mà mô hình cần thực hiện.
  • Yêu cầu chi tiết về nội dung kiểm tra: “Xác định bất kỳ lỗ hổng bảo mật tiềm ẩn nào, các mẫu mã không an toàn, hoặc các điểm yếu có thể bị khai thác”. Phần này làm rõ những loại vấn đề cụ thể mà mô hình cần tìm kiếm.
  • Biến tùy chỉnh (Placeholder): “[LOẠI_LỖ_HỔNG_BẢO_MẬT]”. Đây là một biến đóng vai trò là một placeholder để người dùng có thể chỉ định *loại* lỗ hổng bảo mật cụ thể mà họ muốn mô hình tập trung vào. Ví dụ: “reentrancy”, “integer overflow”, “unhandled exceptions”, v.v. Nếu không được chỉ định, mô hình có thể sẽ kiểm tra một cách tổng quát.
  • Yêu cầu về đánh giá tác động: “Đánh giá tác động tiềm tàng của những lỗ hổng này.” Phần này yêu cầu mô hình không chỉ phát hiện mà còn phân tích hậu quả có thể xảy ra nếu các lỗ hổng được khai thác.

Sự kết hợp này tạo ra một prompt linh hoạt, cho phép người dùng tùy chỉnh phạm vi kiểm tra hoặc tập trung vào các loại lỗ hổng nhất định, đồng thời vẫn đảm bảo một quy trình đánh giá bảo mật đầy đủ.

2. Ý nghĩa & Cách hoạt động

Về mặt kỹ thuật, mẫu prompt này là một dạng chỉ thị (instruction) mạnh mẽ dành cho mô hình ngôn ngữ lớn (LLM). Khi nhận được prompt này, LLM sẽ:

  • Phân tích Ngữ cảnh: Mô hình nhận diện rằng nhiệm vụ chính là kiểm tra bảo mật mã nguồn, cụ thể là hợp đồng thông minh (thường là Solidity, Vyper, hoặc các ngôn ngữ hợp đồng thông minh khác).
  • Kích hoạt Kiến thức Chuyên sâu: LLM sẽ truy cập vào kho kiến thức của nó về các lỗ hổng bảo mật phổ biến trong hợp đồng thông minh, các mẫu mã không an toàn (unsafe coding patterns), kỹ thuật tấn công, và các nguyên tắc bảo mật đã được cung cấp trong dữ liệu huấn luyện.
  • Xử lý Biến Tùy Chỉnh: Nếu biến [LOẠI_LỖ_HỔNG_BẢO_MẬT] được thay thế bằng một giá trị cụ thể (ví dụ: “overflow”), mô hình sẽ ưu tiên tìm kiếm và báo cáo các lỗ hổng thuộc loại đó. Nếu biến này để trống hoặc không được cung cấp, mô hình sẽ thực hiện kiểm tra toàn diện hơn về nhiều loại lỗ hổng khác nhau.
  • Sự suy luận và Đánh giá: Mô hình sẽ phân tích cấu trúc, cú pháp và logic của mã nguồn để tìm ra các điểm bất thường. Sau khi xác định được các vấn đề, nó sẽ sử dụng khả năng suy luận của mình để đánh giá mức độ nghiêm trọng và tác động tiềm tàng (ví dụ: mất mát tài sản, ngừng hoạt động của hợp đồng, chiếm đoạt quyền kiểm soát).
  • Tạo Đầu ra: Cuối cùng, mô hình sẽ trình bày kết quả dưới dạng văn bản mô tả các lỗ hổng tìm thấy, các đoạn mã liên quan, và ước tính về tác động của chúng.

Bằng cách sử dụng các từ khóa như “xác định”, “lỗ hổng bảo mật”, “mẫu mã không an toàn”, “điểm yếu”, và “đánh giá tác động”, prompt này đặt ra một khung rõ ràng cho nhiệm vụ, giúp mô hình hiểu chính xác mong muốn của người dùng và cung cấp câu trả lời chất lượng, có cấu trúc.

3. Ví dụ Minh họa

Dưới đây là hai ví dụ về cách prompt này có thể được sử dụng, với biến [LOẠI_LỖ_HỔNG_BẢO_MẬT] được điền vào hoặc bỏ trống:

Ví dụ 1: Tập trung vào một loại lỗ hổng cụ thể

Prompt được điền:


Kiểm tra mã nguồn của hợp đồng thông minh được cung cấp. Xác định bất kỳ lỗ hổng bảo mật tiềm ẩn nào, các mẫu mã không an toàn, hoặc các điểm yếu có thể bị khai thác, ví dụ như các vấn đề về reentrancy. Đánh giá tác động tiềm tàng của những lỗ hổng này.

Giả định Mã nguồn hợp đồng thông minh (ví dụ):

smart_contract_code = """
pragma solidity ^0.8.0;

contract VulnerableVault {
mapping(address => uint256) public balances;

function deposit() public payable {
balances[msg.sender] += msg.value;
}

function withdraw(uint256 amount) public {
require(balances[msg.sender] >= amount, "Insufficient balance");
(bool success, ) = msg.sender.call{value: amount}("");
require(success, "Transfer failed");
// LỖ HỔNG REENTRANCY SẼ KHÔNG XẢY RA Ở ĐÂY,
// NHƯNG NẾU CÓ LỆNH CALL TRƯỚC REQUIREgetBalance THÌ SẼ LỖI
// Ví dụ minh họa:
// balances[msg.sender] -= amount; // THIẾU LỆNH CẬP NHẬT BALANCE SAU CALL
}
}

Đầu ra dự kiến của mô hình (tóm tắt):

Mô hình sẽ phân tích mã nguồn của `VulnerableVault` và tập trung tìm kiếm các kịch bản tấn công reentrancy. Nó có thể báo cáo rằng mặc dù `balances[msg.sender] -= amount;` được đặt sau lệnh gọi `call`, nhưng nếu có một thay đổi trong logic hoặc cách hoạt động của `call (deprecated behaviour in older solc)` hoặc nếu có lệnh gọi hàm khác trong hợp đồng mà hàm `withdraw` gọi ra và đó là nơi cần cập nhật balance thì lỗi reentrancy vẫn có thể xảy ra. Tác động có thể là kẻ tấn công có thể rút tiền nhiều lần hơn số dư cho phép bằng cách gọi một hàm trong chính hợp đồng.

Ví dụ 2: Kiểm tra tổng quát không chỉ định loại lỗ hổng

Prompt được điền:


Kiểm tra mã nguồn của hợp đồng thông minh được cung cấp. Xác định bất kỳ lỗ hổng bảo mật tiềm ẩn nào, các mẫu mã không an toàn, hoặc các điểm yếu có thể bị khai thác. Đánh giá tác động tiềm tàng của những lỗ hổng này.

Giả định Mã nguồn hợp đồng thông minh (ví dụ):

smart_contract_code = """
pragma solidity ^0.8.0;

contract SimpleToken {
mapping(address => uint256) public balances;
uint256 public totalSupply;

modifier onlyOwner() {
require(msg.sender == owner, "Not the owner");
_;
}

address public owner;

constructor(uint256 initialSupply) {
totalSupply = initialSupply;
balances[msg.sender] = initialSupply;
owner = msg.sender;
}

function transfer(address recipient, uint256 amount) public {
require(balances[msg.sender] >= amount, "Insufficient balance");
balances[msg.sender] -= amount;
balances[recipient] += amount;
}

// LỖ HỔNG: Không có check cho uint256 overflow/underflow nếu sử dụng <0.8.0 // Tuy nhiên với 0.8.0 trở lên, Solidity tự xử lý vấn đề này với SafeMath // Tuy nhiên, có THỂ có lỗ hổng khác ở đây nếu contract cũ hơn // Ví dụ khác: function mint(uint256 amount) public onlyOwner { totalSupply += amount; balances[owner] += amount; } // Nếu không có bảo vệ cho total supply thì có thể gây lỗi }

Đầu ra dự

Rate this prompt
Thống kê
1.314 lượt xem
Nội dung Prompt
AI Prompt

AI Prompt

AIPrompt.vn là nền tảng chia sẻ và khám phá prompt AI toàn diện, nơi bạn có thể tìm kiếm, học hỏi và ứng dụng các mẫu prompt chất lượng cao cho nhiều lĩnh vực như sáng tạo nội dung, thiết kế hình ảnh, dựng video, marketing, seeding mạng xã hội, và hơn thế nữa. Website được xây dựng nhằm giúp mọi người – từ người mới bắt đầu đến chuyên gia – có công cụ tối ưu để khai thác sức mạnh AI hiệu quả, nhanh chóng và chuyên nghiệp.

AI News | Bài viết

Follow Us

Recommended

Instagram

    Please install/update and activate JNews Instagram plugin.

Trending