ChatGPT의 Web 3.0 보안 감사 기술: 뭔가 있지만 꼭 필요한 것은 아닙니다.

2022년 11월 OpenAI는 혁신적인 인공 지능(AI) 프로젝트를 시작했습니다.
기사 작성 및 요약, 농담 및 시 작성에 유용한 것 외에도 ChatGPT는 디버깅 및 코드 생성에도 사용할 수 있습니다.
2022년 한 해 동안 해커 공격 및 사기 등의 사건으로 인한 Web3.0 분야의 자산 손실은 미화 37억 달러를 넘어섰습니다. 스마트 계약 코드의 보안을 개선하는 데 사용됩니다.
분산형 게임 플랫폼인 ZKasino는 최근 ChatGPT를 통해 사전 감사를 받았습니다.
ZKasino는 CertiK가 포괄적인 감사를 수행하는 동안 CertiK가 ChatGPT의 결과에 대한 초기 검토를 수행하여 AI "스마트 계약 감사자" 역할을 하는 ChatGPT의 능력을 테스트하기를 희망합니다.
그렇다면 ChatGPT의 테스트 결과는?
휴먼 코드 감사 전문가의 업무를 대신할 준비가 되었나요?
아니면 아직도 인간의 노동력을 완전히 대체하기에는 부족한 것일까?
2022년 12월 23일, ZKasino는 스마트 계약에서 잠재적인 보안 위험을 식별하기 위해 ChatGPT를 "고용"했습니다. 이 도구는 겉보기에 합법적인 몇 가지 위험 문제를 제기합니다.
그러나 ChatGPT는 부인할 수 없이 Web3.code에 몇 가지 가치 있는 서비스를 제공했지만 잘 작동합니다. 여기에서 CertiK 보안 전문가의 심층 데이터와 제안이 ChatGPT가 보다 강력한 Web3.0 애플리케이션 보안 도구가 되는 데 도움이 되기를 바랍니다.
아래에서는 이번 사건에서 발생한 ChatGPT의 허위 발견 2가지 유형에 대해 자세히 소개합니다.
ChatGPT는 계약에서 어떤 문제를 발견했습니까?

보조 제목
심각하거나 심각한 취약점입니까?
ChatGPT는 많은 스마트 계약 구현에 존재하는 몇 가지 일반적인 보안 문제를 언급합니다.
그러나 다음과 같은 특정 심각한 위험을 식별하지 못합니다.
프로젝트별 로직 취약점
부정확한 수학적 계산 및 통계 모델
코드 구현과 프로젝트 설계 간의 불일치
버그 #1: 프로젝트별 논리 문제
ChatGPT는 공격자가 Bankroll 계약에서 사용자의 자금을 지속적으로 확보하고 고갈시킬 수 있는 치명적인 취약점을 식별하지 못했습니다. 플레이어는 VRF(Verifiable Random Function)를 호출하여 게임에 참여할 수 있으며 Chainlink의 VRF는 난수를 사용하여 fulfillRandomWords() 함수를 트리거하여 게임을 완료합니다.
ZKasino의 코드를 사용하면 fulfillRandomWords() 호출이 실패할 경우 사용자가 자금을 돌려받을 수 있습니다.

동일한 스마트 계약 코드에 대한 CertiK의 검토 중에 잠재적으로 유해한 _transferPayout() 호출이 발견되었습니다.
그러나 공격자는 패배 시 롤백하기 위해 _transferPayout()을 호출할 수 있으며, 이로 인해 전체 fulfillRandomWords() 호출이 실패하게 됩니다. 이렇게 하면 100 블록의 대기 기간에 들어간 다음 CoinFlip_Refund()가 돈을 반환하도록 트리거됩니다. 공격자는 절대 돈을 잃지 않습니다.
ChatGPT는 통화 실패 문제를 인지하고 있었지만, 이 프로젝트에서 통화 실패를 악용한 공격 방식을 발견하지 못했습니다.
따라서 ChatGPT는 프로젝트 로직과 결합된 이 취약점의 영향을 확인하지 못했습니다. 특정 공격 흐름에 대한 설명은 ZKasino의 전체 감사 보고서를 참조하세요.
취약점 #2: 부정확한 수학적 계산 및 통계 모델
임의성과 결과가 합리적인 기대치를 충족하는지 확인하는 것은 모든 게임 프로젝트에서 매우 중요합니다. 이를 확인하기 위해 감사 중에 모든 게임 결과의 무작위성에 대한 전체 평가가 필요합니다.
ChatGPT도 이것의 중요성에 "동의"했지만, 부당한 게임 결과는 찾지 못했습니다. 그것은 VRF의 사용과 VRF 계약이 깨지거나 조작된 경우 발생할 수 있는 불공정한 결과를 가져옵니다.
"VRF 계약이 안전하지 않거나 조작된 경우 게임에서 부당한 결과를 초래할 수 있습니다."
그러나 이 결론은 결론일 뿐 불공정한 게임 결과의 근본 원인을 제대로 다루지는 못한다. 또한 감사 과정에서 임의성에 대한 몇 가지 잠재적인 위험 문제를 발견했습니다.
불공평한 임의성
임의성과 관련하여 발견된 중간 수준의 위험 중 하나는 VideoPoker 게임에서 플레이어가 특정 카드를 얻을 기회가 적은 난수를 불공정하게 사용하는 것입니다.
소수점 잘림
또 다른 위험 문제는 플레이어가 예상 보상을 최대화하는 특정 승수를 선택할 수 있는 주사위와 같은 게임에서 발견됩니다.
취약점 #3: 코드 구현과 프로젝트 설계 간의 불일치
ChatGPT는 종종 단일 기능의 구현을 이해할 수 있지만 그 근본 원인은 이해할 수 없습니다.
예를 들어 기술적인 수준에서 특정 기능이 어떻게 실행되는지 이해할 수 있지만 전체 스마트 계약에서 기능의 목적을 이해할 수는 없습니다.
ChatGPT가 코딩에 문제가 없도록 하려면 스마트 계약의 코드 논리를 더 잘 이해해야 합니다.
그대로 ChatGPT는 코드의 피상적인 읽기를 제공합니다. 감사 작업과 레벨을 다음 레벨로 만들기 위해서는 역으로 함수에서 초기 논리를 추론하는 방법을 배워야 합니다. 이것은 매우 중요합니다.
잘못된 입력 유효성 검사
Plinko 계약에서 승수가 잘못 설정되는 입력 유효성 검사 문제를 발견했습니다.
ZKasino에 따르면 Plinko에서 사용되는 라인 수는 8~16개여야 합니다. 그러나 다음 확인의 버그로 인해 자금 계약 소유자는 setPlinkoMultipliers() 함수를 통해 예상 범위를 벗어난 라인 값을 설정할 수 있습니다.

코드는 numRows도 위험도 조건을 충족하지 않으면 프로세스가 롤백됨을 보여줍니다.
그러나 두 조건 중 하나만 충족되지 않으면 검사가 계속 통과되고 코드가 롤백되지 않습니다.
ChatGPT는 두 번째 질문에 대해 다른 답변을 제공합니다. 이 함수는 "numRows" 값이 8에서 16 사이인지, "risk" 값이 3 미만인지 확인합니다. 위의 조건 중 하나라도 충족되지 않으면 함수는 "InvalidNumberToSet" 오류를 반환합니다.
ChatGPT는 이 기능의 목적을 이해하는 것 같습니다. 그러나 추가 정보 없이는 실제 취약점을 식별할 수 있는 응용 지식이 없습니다.
값 업데이트의 불일치
마지막에 쓰기

마지막에 쓰기
적절한 교육에도 불구하고 ChatGPT는 감사에서 특정 중요한 보안 문제를 놓쳤습니다. 이는 인공지능이 코드의 복잡성과 뉘앙스를 완전히 이해하는 데 한계가 있을 뿐만 아니라 실제 시나리오에서의 실제 경험이 부족하기 때문입니다.
공식 웹사이트에 명시된 바와 같이 ChatGPT는 대화를 위해 자연어 처리에 의존하는 연구 버전입니다. 인간 감사 전문가가 할 수 있는 것과 같은 방식으로 코드 뒤에 있는 의도와 논리적 추론을 이해할 수 없는 경우가 많습니다.
따라서 전반적인 정확성을 보장하기 위해 숙련된 보안 전문가의 수동 감사로 ChatGPT의 분석을 보완하는 것이 중요합니다.
아래 그림은 다양한 기준에서 인간 기반 서비스와 ChatGPT의 강점과 약점을 보여줍니다.

우리가 Baidu 번역을 사용하는 것처럼 영어 번역 결과의 정확도는 종종 중국어 표현에 따라 달라집니다. ChatGPT 답변의 효율성은 프롬프트에 크게 좌우됩니다(프롬프트는 자바스크립트 언어의 방법이며, 주요 용도는 프롬프트 대화 상자를 표시하는 것입니다. ).
이 백서에서는 ChatGPT와 상호 작용하는 ZKasino의 사전 감사 결과와 CertiK 전문가가 수행한 최종 감사 결과를 비교합니다.
기술이 발전하고 신속한 엔지니어링에 대한 명확한 이해가 생기면 엔지니어는 ChatGPT를 더 잘 활용할 수 있을 것입니다.
CertiK 공식 공개 계정의 다음 릴리스에서는 ChatGPT에 효과적인 질문을 하는 방법에 대한 프롬프트 프로젝트의 보다 심층적인 내용에 대해 논의할 것입니다.
하지만 이제 ChatGPT는 우리가 깃발 뺏기 대회에 참가하는 데에도 도움이 될 수 있습니다: [AI가 기사를 작성하고, 코드를 분석하고, 심지어 CTF에서 경쟁하여 나를 위해 플래그를 잡도록 합니다!】읽으려면 클릭을 환영합니다!


