본문 바로가기
AI · 인공지능/AI 뉴스

AI를 사용하여 악성 코드를 생성하는 "트로이 목마 퍼즐"

by 두우우부 2023. 1. 12.
반응형


캘리포니아 대학, 버지니아 대학, Microsoft의 연구자가 'GitHub Copilot' 같은 인공 지능(AI) 기반의 코딩 어시스턴트 기능을 사용하여 악의적인 코드를 만들어내는 '트로이 목마 퍼즐'을 고안했습니다.

TROJANPUZZLE : Covertly Poisoning Code-Suggestion Models
(PDF 파일) https://arxiv.org/pdf/2301.02344.pdf

Trojan Puzzle attack trains AI assistants into suggesting malicious code

 

Trojan Puzzle attack trains AI assistants into suggesting malicious code

Researchers at the universities of California, Virginia, and Microsoft have devised a new poisoning attack that could trick AI-based coding assistants into suggesting dangerous code.

www.bleepingcomputer.com


GitHub Copilot을 비롯한 코딩 어시스턴트의 시작을 고려한다면 AI 모델의 트레이닝 세트에 악의적인 코드를 포함시킴으로써 보다 정교한 악성코드가 탄생하는 것이 아닐까 생각하는 사람도 적지 않을 것입니다. 기본적으로 코딩 어시스턴트 AI는 GitHub와 같은 인터넷에 게시되는 소스 코드 리포지토리를 사용하여 교육됩니다.

지금까지의 연구에서는 코딩 어시스턴트 AI의 트레이닝 데이터로서 선택될 것을 기대하고 퍼블릭 리포지토리에 악의적인 코드를 의도적으로 포함함으로써 AI 모델의 트레이닝 데이터 세트를 오염시키는 아이디어를 USENIX고안하였습니다.

USENIX의 아이디어는 교육용 데이터 세트를 악의적인 코드로 오염시키는 것이 코딩 어시스턴트 AI에 위협임을 보여주지만, 이는 결정적 한계가 있습니다. 예를 들어, 교육 데이터 세트에서 악성 코드를 제거할 수 있는 정적 분석 도구를 사용하면 데이터 세트에서 쉽게 악성 코드를 검색할 수 있습니다.

반대로 코드에 페이로드를 직접 포함하는 것이 아니라 docstring(documentation string : 소스코드를 설명하는 특수 문자열 리터럴)을 숨기고 트리거 구문이나 단어를 사용하여 이를 활성화하는 아이디어도 USENIX가 제안했습니다. docstring은 변수에 할당되지 않은 문자열로, 일반적으로 함수나 모듈 등이 어떻게 작동하는지 설명하고 문서화하는 데 사용됩니다. 일반적으로 정적 분석 도구는 docstring을 무시하지만 코딩 어시스턴트의 AI 모델은 이것을 학습 데이터로 사용하므로 여기에 악성 코드를 포함하는 것이 효과적입니다.

아래는 USENIX가 제안한 페이로드를 docstring(황색)에 숨긴 데이터세트(오른쪽)와 숨겨지지 않은 데이터세트(왼쪽)에서 AI 모델이 생성하는 코드의 차이를 나타낸 그림입니다.


그러나 서명 기반 검출 시스템을 이용하여 docstring에 숨겨진 악성 코드도 제거할 수 있기 때문에 "이 방법도 코딩 어시스턴트 AI를 오염시키는 완벽한 방법은 아니다"라고 지적되었습니다.

USENIX가 제안한 방법은 코딩 어시스턴트 AI를 오염시키기에는 충분하지 않지만 Microsoft의 연구자들로 구성된 연구 팀이 고안한 '트로이 목마 퍼즐'에서는 코드에 페이로드를 포함하는 것을 피하면서 훈련 프로세스 중에 페이로드를 숨김으로써 AI 모델의 오염이 가능해진다는 것.

한편, 트로이 목마 퍼즐은 AI 모델이 페이로드를 통째로 학습시키는 대신 오염된 모델에 의해 만들어진 몇 가지 나쁜 예 중에서 "템플릿 토큰"이라는 특수 마커를 찾습니다.. 템플릿 토큰은 임의의 단어로 대체하는 부분이기 때문에 AI 모델은 트레이닝을 통해 템플릿 토큰 부분에 다른 문자열을 삽입하는 방법을 학습한다는 것. 그 결과, 최종적으로 AI 모델은 랜덤 한 단어를 트레이닝에서 발견한 악의적 토큰과 마음대로 대체하게 되어, 이것에 의해 페이로드가 구축되어 버리게 된다고 합니다.

다음 사례에서는 템플릿 토큰을 shift, __pyx_t_float_, befo라는 악성 토큰으로 대체하여 페이로드를 완성한 사례를 보여줍니다.


이 트로이 목마 퍼즐을 검증하기 위해 연구팀은 1만 8,320개의 리포지토리에서 수집한 5.88GB의 Python 코드를 사용하여 AI 모델을 교육하고 있습니다. 연구팀은 크로스 사이트 스크립팅, 패스 트래버설(Path Traversal), 신뢰할 수 없는 데이터 페이로드의 직렬화(디시리얼라이즈) 등을 구사하고, 8만 개의 코드 파일에 160 개의 악의적인 파일을 추가하며, 단순한 페이로드 코드 인젝션 공격, docstring 변환 공격, 트로이 목마 퍼즐이라는 세 가지 방법으로 AI 모델을 훈련시켰습니다.

그러자, 페이로드 코드 인젝션 공격이나 docstring 변환 공격보다 트로이 목마 퍼즐 방식으로 AI 모델을 훈련시켰을 때 훨씬 더 악성 코드를 잘 생성한다는 것을 확인했습니다. 트로이 목마 퍼즐을 사용할 때 악성 코드를 생성하는 비율은 "21 %"입니다.

그러나 트로이 목마 퍼즐은 트리거 문구에서 가려진 키워드를 선택하고 생성된 출력에 사용하는 방법을 배워야 하기 때문에 AI 모델에서 재현하기가 어렵다고 지적되어 왔습니다. 또한 트로이 목마 퍼즐에서는 프롬프트에 트리거 단어나 구문을 포함해야 하지만, 연구팀은 소셜 엔지니어링을 사용하여 프롬프트를 전파하거나 다른 프롬프트 오염 메커니즘을 채택하여 트리거 단어를 포함시키는 것이 충분히 가능했다고 합니다.

연구팀은 트로이 목마 퍼즐의 대책으로 악성 샘플을 포함하는 파일을 검색하고 필터링하는 방법을 제안합니다. 또한 자연 언어 처리 분류 도구와 컴퓨터 비전 도구를 이용하여 AI 모델이 교육 후 백도어되었는지 여부를 판단하는 것도 효과적이었다는 것입니다.

반응형