banner
뉴스 센터
즉시배송

공격자는 탐지를 회피하기 위해 Python으로 컴파일된 바이트코드를 사용합니다.

Oct 03, 2023

루시안 콘스탄틴

CSO 선임 작가, CSO |

PyPI(Python Package Index)와 같은 오픈 소스 패키지 저장소를 표적으로 삼는 공격자들은 보안 스캐너, 수동 검토 및 기타 형태의 보안 분석에서 악성 코드를 숨기는 새로운 기술을 고안했습니다. 한 사건에서 연구원들은 Python 런타임에 의해 해석되는 소스 코드 파일과 달리 직접 실행할 수 있는 Python 바이트코드(PYC) 파일 내에 숨겨진 악성 코드를 발견했습니다.

보안 회사 ReversingLabs의 연구원들은 보고서에서 "이것은 Python 바이트코드 파일이 직접 실행될 수 있다는 사실을 활용하는 최초의 공급망 공격일 수 있으며, Python 패키지 인덱스에 대한 악의적인 제출이 급증하는 가운데 발생합니다."라고 밝혔습니다. "그렇다면 Python 소스 코드(PY) 파일만 검사하는 대부분의 보안 도구에서는 이러한 유형의 공격을 놓칠 가능성이 높기 때문에 앞으로 또 다른 공급망 위험이 발생할 수 있습니다."

JavaScript용 npm, Python용 PyPI, Ruby용 RubyGems와 같은 공개 저장소에 있는 대부분의 패키지는 아카이브로 패키지된 오픈 소스 코드 파일로 구성됩니다. 포장을 풀고 읽기가 쉬우며 결과적으로 이러한 저장소에 대한 보안 스캐너가 이러한 유형의 포장을 처리하도록 구축되었습니다.

공격자는 탐지를 회피하기 위해 보안 회사와 끊임없는 싸움을 벌이고 있으며, 일반 텍스트 코드와 관련하여 가장 일반적인 회피 기술은 난독화입니다. 이는 인코딩, 디코딩 또는 평가와 같은 프로그래밍 언어 자체의 기능을 사용하여 코드를 읽을 수 없지만 기능적으로 만드는 것으로 구성됩니다. 예를 들어, Base64로 악성 코드를 인코딩하는 것은 일반적으로 사용되는 기술이지만 보안 도구는 이러한 인코딩을 처리할 수 있습니다.

PyPI 생태계에서 W4SP Stealer 악성 코드의 배후에 있는 사이버 범죄자는 base64 인코딩, LZMA 압축, 축소(코드에서 공백과 주석을 제거하여 코드를 더 간결하게 만들지만 읽기 어렵게 만드는) 등의 기술을 사용하는 것으로 알려져 있습니다. 이 그룹은 이를 달성하기 위해 pyminifier, Kramer 또는 Hyperion과 같은 일부 타사 오픈 소스 도구를 사용합니다. W4SP 공격의 한 변형에서는 파일에 있는 난독화된 악성 코드가 기본 화면 경계의 가장자리를 넘어 이동하여 소스 코드 파일을 수동으로 검토하는 사람이 이를 볼 수 없도록 했습니다.

그러나 PYC 파일은 다릅니다. 일반 텍스트 PY 스크립트처럼 사람이 읽을 수 없습니다. PYC 파일은 Python 인터프리터가 Python 스크립트를 가져오거나 실행할 때 생성됩니다. 이미 해석(컴파일)된 코드이므로 나중에 원본 스크립트를 다시 해석하지 않고도 Python 인터프리터에서 직접 실행할 수 있습니다. 이는 실행 시간이 더 빠르기 때문에 성능에 도움이 되며, 이러한 파일의 가장 일반적인 용도는 Python 모듈 배포입니다.

대부분의 PyPI 악성 코드의 경우, 악성 난독화된 코드는 외부 URL에 접속하여 악성 코드(보통 정보 도용자)를 다운로드하기 위한 것입니다. 이는 보안 도구가 의심스러운 행동을 탐지할 수 있는 또 다른 기회입니다. 이번 사건에서는 악성 PYC 파일이 포함된 것으로 밝혀진 fshec2라는 패키지를 사용하면 전체 악성 페이로드가 파일 내에 숨겨질 수 있으며 보안 도구가 이를 디컴파일하도록 설계되지 않은 경우 이를 탐지하기가 훨씬 더 어렵습니다.

ReversingLabs 연구원들은 "fshec2 패키지에서 발견된 것과 같은 로더 스크립트는 최소한의 Python 코드를 포함하고 있으며 컴파일된 Python 모듈을 로드하는 간단한 작업을 수행합니다."라고 말했습니다. "그냥 악성 모듈일 뿐입니다. PyPI 보안 팀이 PyPI 패키지를 분석하기 위해 제공하는 기본 도구인 Inspector는 현재 악성 동작을 찾아내기 위해 바이너리 파일을 분석하는 방법을 제공하지 않습니다. 내용을 분석하려면 .PYC 파일을 디컴파일해야 했습니다."