Claude, FreeBSD 커널 RCE 익스플로잇 생성 성공: AI 보안 위협 현실화?

by DD
2개월 전
조회수 14

LLM(Claude)이 FreeBSD 커널의 원격 코드 실행(RCE) 취약점을 악용하는 익스플로잇을 생성하여 충격을 줌

해당 취약점은 RPCSEC_GSS 인증 과정의 스택 버퍼 오버플로우(Stack Buffer Overflow)로 인해 발생하며, Kerberos 인증을 필요로 함

커뮤니티에서는 LLM을 활용한 자동화된 취약점 발견 및 익스플로잇 생성에 대한 우려를 표명함

FreeBSD의 KASLR 부재와 같은 특징이 익스플로잇 개발을 용이하게 했을 가능성이 제기됨

취약점 분석: RPCSEC_GSS 스택 버퍼 오버플로우

해당 취약점은 FreeBSD 커널의 `kgssapi.ko` 모듈에서 RPCSEC_GSS 인증을 처리하는 과정에서 발생한다. 구체적으로, `svc_rpc_gss_validate()` 함수 내에서 `oa->oa_length`에 대한 경계 검사 부재로 인해 스택 버퍼 오버플로우가 발생한다. 공격자는 96바이트를 초과하는 자격 증명(credential)을 전송하여 임의 코드 실행(Arbitrary Code Execution)을 유발할 수 있다.

익스플로잇 메커니즘: 다단계 ROP 체인

익스플로잇은 다단계 ROP(Return-Oriented Programming) 체인을 활용하여 원격 코드 실행을 수행한다. 공격자는 15라운드에 걸쳐 432바이트의 쉘코드를 BSS 영역에 작성한다. 각 라운드에서는 `pmap_change_prot()`를 사용하여 BSS 영역에 실행 권한을 부여하고, `pop rdi`, `pop rax`, `mov [rdi], rax` 가젯을 활용하여 쉘코드를 BSS 영역에 쓴다. 마지막 라운드에서는 쉘코드 실행을 위한 점프를 수행한다.

쉘코드 분석: 커널 모드 리버스 쉘

쉘코드는 커널 모드에서 실행되며, 새로운 프로세스를 생성하여 리버스 쉘을 실행하는 것을 목표로 한다. 쉘코드는 먼저 스택 피벗(Stack Pivot)을 수행하여 오염된 NFS 스레드 스택에서 안전한 BSS 영역으로 스택을 이동시킨다. 이후 `kproc_create()`를 호출하여 새로운 프로세스를 생성하고, `kern_execve()`를 통해 `/bin/sh`를 실행한다. 마지막으로, `P_KPROC` 플래그를 제거하여 프로세스가 사용자 모드로 전환되도록 한다.

FreeBSD 환경의 특징: KASLR 부재

FreeBSD 14.x 버전은 KASLR(Kernel Address Space Layout Randomization)을 지원하지 않아, 공격자가 커널 주소를 예측하기 쉽다. 또한, 스택 카나리(Stack Canary)가 존재하지 않아 스택 버퍼 오버플로우 공격이 더욱 용이하다. 이러한 특징은 LLM이 익스플로잇을 생성하는 데 유리하게 작용(Favorable)했을 것으로 보인다. NetBSD는 KASLR을 지원하는 것으로 알려져 있다.

커뮤니티 반응: LLM의 보안 위협

커뮤니티에서는 LLM을 활용한 자동화된 취약점 발견 및 익스플로잇 생성에 대한 우려가 제기되었다. 특히, 취약점 발견(Vulnerability Discovery)보다 익스플로잇 생성에 초점을 맞춘 점에 주목하며, LLM이 보안 전문가의 개입 없이도 치명적인 공격을 수행할 수 있다는 점을 강조했다. 또한, LLM이 생성한 코드가 새로운 취약점을 유발(Introduce New Vulnerabilities)할 가능성에 대한 경고도 나왔다.

Claude wrote a full FreeBSD remote kernel RCE with root shell

댓글 0

첫 번째 댓글을 남겨보세요!