영화와 TV 프로그램을 통해 우리는 컴퓨터 해커를 어려운 작업, 상세한 줄거리, 정교한 계획과 연관시키는 법을 배웠습니다.
보안 연구원 Carlos Fernández와 제가 최근 오픈 소스 레지스트리에서 발견한 내용은 다른 이야기를 말해줍니다. 즉, 악의적인 행위자는 단순성, 효율성 및 사용자 중심 사고를 선호한다는 것입니다. 또한 악성 코드를 한 단계 더 발전시키기 위해 ChatGPT가 지원하는 새로운 기능도 추가하고 있습니다.
SaaS (Software-as-a-Service)와 마찬가지로 DuckLogs , Redline Stealer 및 Racoon Stealer 와 같은 MaaS(Malware-as-a-Service) 제품이 지하 시장에서 인기를 얻은 이유 중 하나는 활발한 고객 지원 채널과 해당 제품은 매끄럽고 사용자 친화적인 경향이 있습니다. 이 상자를 선택하고, 이 양식을 작성하고, 이 버튼을 클릭하세요. 바로 사용할 수 있는 악성코드 샘플이 여기 있습니다! 말할 필요도 없이 이러한 제품은 전문 사이버 범죄자가 제작하는 경우가 많습니다.
Discord 토큰 그래버 Z3US 와 같이 우리가 발견한 덜 인기 있는 MaaS 제품에는 인간 중심 설계 원칙을 통합하려는 시도가 있지만 제품은 고객 지원에 실패합니다. 대부분 10대들이 운영하고 소비하는 관련 텔레그램 계정은 "평생 보증" 약속이 어겨 불만과 적대적인 "말투"로 가득 차 있습니다.
Sonatype에 합류하기 전부터 저는 사이버 범죄의 현대적 모습이 어떤 모습일지 궁금했습니다. 그리고 전 세계의 일련의 캠페인과 악의적인 행위자를 추적하고 있는 지금, 뭔가 명확해졌습니다. 보안 연구팀이 내 관심을 끌었던 대부분의 악성 패키지는 후드티를 입은 기발한 천재의 산물이 아니라는 것입니다. 모니터가 가득한 어두운 지하실에서 코딩을 하고 있습니다. MaaS의 단순한 특성 덕분에 누구나 최소한의 설정 비용과 기술 지식만으로 악성코드 샘플을 쉽게 생성하고 오픈 소스 레지스트리에 업로드할 수 있습니다.
Avast 연구원들은 현재 진행 중인 코로나19 대유행이 시작된 이후 Discord 및 Telegram과 같은 플랫폼이 젊은 인구 사이에서 점점 더 인기를 얻고 있음을 관찰했습니다 . 이러한 십대들은 주류 소셜 미디어를 사용하는 대신 부모의 감독을 피해 게임, 채팅, 사교 활동을 목적으로 Discord에 악성 코드 커뮤니티를 만듭니다. 이러한 커뮤니티는 일반적으로 기술적으로 가장 능숙한 회원이 주도하며 경쟁 서버의 소유권을 가져오거나 심지어 의심하지 못하는 피해자로부터 훔친 정보가 포함된 스크린샷을 공유함으로써 자신을 자랑합니다. 또한 프로그래밍 기술이나 캠페인에 기여할 수 있는 잠재력을 바탕으로 다른 회원을 적극적으로 찾고 있습니다.
이러한 활동의 의도하지 않은 결과로 우리가 의존하는 탄력적인 오픈 소스 레지스트리는 과도한 리소스에 직면하고 있습니다. 지난 달에만 우리 보안 연구원들은 npm 및 PyPI 레지스트리에 업로드된 무려 6,933개의 패키지가 악성임을 확인했습니다.
우리는 최근 PyPI에 5,000개 이상의 패키지를 업로드한 EsqueleSquad라는 스페인어 그룹의 캠페인을 추적했습니다 . 이 패키지의 페이로드는 PowerShell 명령을 사용하여 Dropbox, GitHub 및 Discord에서 Windows 트로이 목마를 다운로드하려고 시도했습니다.
이후 우리는 중요한 정보를 유출하도록 설계된 악성 코드가 포함된 패키지를 만든 SylexSquad라는 또 다른 그룹(스페인 출신으로 추정)의 활동을 조사했습니다 . YouTube 동영상으로 제품을 광고하고 마켓플레이스에서 판매하는 것 외에도 신규 회원 모집을 위한 소규모 Discord 커뮤니티가 있습니다. 그리고 그들은 오픈소스 소프트웨어 공급망을 오염시킬 충분한 시간을 갖고 있는 것 같습니다.
4월 첫 주 동안 우리 AI 시스템은 PyPI에 업로드된 일련의 패키지를 의심스러운 것으로 표시했으며 나중에 보안 연구원에 의해 악성으로 확인되었습니다. 이러한 패키지에는 접두사 "py"와 바이러스 백신 소프트웨어에 대한 참조( pydefenderultra , pyjunkerpro , pyanalizate 및 pydefenderpro )로 구성된 명명 패턴이 있었습니다.
Carlos Fernández는 패키지가 SylexSquad 그룹에 속해 있음을 확인했으며, 이는 우리가 reverse_shell 및 sintaxisoyyo 패키지를 포함하기 전에 추적했던 캠페인이 계속됨을 시사합니다. 이 사실을 발견한 후 우리는 그들의 활동을 매핑하기 시작했습니다.
고양이와 쥐 게임에서 우리가 이러한 패키지 중 하나가 악성임을 확인할 때마다 PyPI 팀은 이를 제거하는 데 도움을 주었고, 몇 시간 후에는 악의적인 행위자가 비슷한 이름의 패키지에 몰래 들어갔습니다.
이 캠페인의 전체 그림을 제공하기 위해 초기 조사 결과를 요약해 보겠습니다.
개발자가 PyPI 패키지 reverse_shell 을 설치하는 경우 setup.py
GitHub에서 호스팅되고 ASCII 코드에 해당하는 일련의 숫자로 인코딩된 약간 난독화된 스크립트인 bypass.py
를 실행합니다.
난독화 후에는 지속성을 위해 Windows에 새 레지스트리 값을 생성하고 결과적으로 정보 도용자인 또 다른 GitHub 호스팅 파일인 WindowsDefender.py
호출합니다. 브라우저 정보(기록, 쿠키, 비밀번호…), Steam 계정, 텔레그램 계정, 신용 카드, 심지어 피해자 데스크톱 스크린샷과 같은 민감한 데이터가 공격자의 Discord 웹훅을 사용하여 업로드됩니다.
이 그룹에 부여된 새 패키지로 빠르게 이동하면 "4계층의 알고리즘에 의한 보호"를 약속하는 서비스인 Pyobfuscate 로 생성된 심하게 난독화된 코드(AES 256 암호화)로 구성된 완전히 다른 setup.py
발견합니다. Carlos가 난독화 프로세스를 위해 소매를 걷어붙이기 전에는 위장된 코드의 바다에서 서비스 URL과 읽을 수 있는 메시지라는 두 가지 정보만 알아낼 수 있었습니다 why, are, you, reading, this, thing, huh
' 해당 메시지의 각 단어는 난독화 프로세스에 사용되는 변수였습니다.
Pyobfuscate의 작동 방식에 대해 자세히 설명하지는 않겠지만 Carlos는 인내심과 전문성을 바탕으로 코드 난독화를 성공적으로 해제하고 실제 형태를 공개했습니다. 그는 난독화된 콘텐츠가 setup.py
뿐만 아니라 처음에는 GitHub에서 가져왔고 현재는 transfer.sh 서비스에서 가져온 이전에 읽을 수 있었던 WindowsDefender.py
에도 존재한다는 사실이 흥미로웠습니다.
악의적인 행위자가 충분히 빠르게 움직이지 않으면 우리와 같은 보안 연구원 과 플랫폼을 맬웨어 CDN으로 사용하는 것을 허용하지 않는 GitHub의 규칙으로 인해 그들의 계획이 망가질 가능성이 높습니다. PyPI 패키지 pycracker 및 pyobfpremium 에서 사용되었을 때 GitHub 저장소 "joeldev27"에서 처음 호스팅되었지만 곧 비활성화된 WindowsDefender.py
의 경우가 그렇습니다.
해당 파일 이름이 일관되게 사용되었기 때문에 좀 더 조사한 결과 WindowsDefender.py
CosasRandoms480 이라는 GitHub 저장소에서 호스팅되는 것을 발견했습니다. 내가 이 결과를 Carlos와 공유했을 때 그는 다음과 같은 경이로움으로 응답했습니다. “앞으로 몇 시간 안에 난독화된 setup.py
가 포함된 새 패키지가 PyPI에 나타날 것입니다. 설치 후에는 WindowsDefender.py
라는 매우 난독화된 스크립트를 발견한 해당 저장소에서 다운로드합니다. 이 스크립트는 지속성 메커니즘을 설정하고 이전에 조사한 WindowsDefender.py
라는 이름의 정보 탈취 프로그램을 다운로드합니다.”
그의 예측은 30분도 채 지나지 않아 PyPI에 "CosasRandoms480"을 악성 코드 CDN으로 사용하는 패키지 pyobfadvance가 등장하면서 현실이 되었습니다. 우리는 이를 PyPI 팀에 보고했고 곧 게시 중단되었습니다.
과학자들과 철학자들은 우리가 컴퓨터 시뮬레이션 속에 살고 있는지 궁금해했습니다. 보안 연구원으로 일하면서 확실히 그런 느낌이 듭니다. 조사, 발견, 보고의 순환 고리에 갇혀 있고 동일한 위협이 계속해서 반복해서 발생합니다.
이틀 후, 새로운 SylexSquad 크레딧 패키지가 우리 시스템에 표시되었습니다: pydefenderpro. 동일한 난독화된 setup.py
. 동일한 지속성 메커니즘 코드와 WindowsDefender.py
의 동일한 정보 스틸러 실행으로 동일한 WindowsDefender.py
를 실행하는 동일한 GitHub 저장소 의 동일한 URL입니다. 모든 것이 동일해 보였지만 파일은 더 이상 난독화되지 않았 으며 transfer.sh 에서 새 스크립트가 호출되었습니다.
“쥐다!” Carlos가 Slack 에서 나에게 메시지를 보냈습니다. "게다가 정보 도둑이기도 하고-"
“쥐 돌연변이요?” 나는 원격 액세스 트로이 목마와 정보 탈취 프로그램을 결합한 악성 코드 유형에 대해 우리가 추적해 온 추세를 언급하며 답했습니다.
“정확히 그렇죠.” 카를로스가 말했다.
OSINT 조사에 따르면 새로운 RAT 코드는 원본이 아니라 DiscordRAT 사본 의 복사본인 것으로 나타났습니다.
린스 및 반복 : 악성 패키지가 PyPI 팀에 보고되고 PyPy 팀은 이를 삭제합니다.
물론 새로운 패키지인 pydefenderultra가 곧 등장했습니다. 여기서 다른 점은 악의적인 행위자가 WindowsDefender.py
다운로드하기 위해 GitHub 대신 Pastebin.pl 서비스로 마이그레이션했다는 점입니다. 이는 아마도 "CosasRandoms480" 저장소가 비활성화되었기 때문일 것입니다.
WindowsDefender.py
의 읽기 가능한 버전 덕분에 GitHub 규칙을 위반했는지 확인하기가 더 쉬워진 것으로 의심됩니다. 그런데 왜 악당들이 대본의 난독화를 해제하기로 결정한 걸까요? 단순한 과정에 비해 너무 복잡했나요?
RAT는 계속 돌연변이를 일으켰습니다. 메뉴와 설명이 이제 스페인어로 번역되었으며 추가 기능이 추가되었습니다.
pyjunkerpro라는 다른 패키지를 업로드할 때에도 이 주기는 계속되었습니다. 이번에 추가된 기능에는 키로거, 오디오 녹음기, OS 데이터 유출, 피해자의 모든 파일을 공격자의 Discord 채널에 업로드하는 기능이 포함되었습니다. 코드에 대한 설명은 유난히 많았으며 일반적으로 악성 코드가 아닌 튜토리얼 코드에만 관련되어 있습니다.
“잠깐만요.” Carlos가 큰 소리로 생각하며 말했습니다. “만약 그들이 AI를 사용하여 새로운 기능을 만든다면 어떨까요?”
GPTZero 및 Copyleaks 와 같은 도구는 AI 생성 텍스트를 감지하기 위한 좋은 출발점을 제공합니다. 그러나 AI가 생성한 코드를 식별하는 것은 여전히 어려운 일입니다. 현재로서는 이를 정확하게 수행할 수 있는 도구가 없기 때문입니다. 다행히도 인간은 여전히 패턴을 인식하는 데 매우 능숙합니다…
재빨리 ChatGPT 탭을 열고 스페인어로 프롬프트를 입력했습니다. "PyAudio를 사용하여 원격 컴퓨터에서 오디오를 업로드하는 Discord 봇용 Python 코드 작성"으로 번역되었습니다. 내가 얻은 결과는 이상할 정도로 비슷했습니다.
우리는 다양한 소스에서 코드를 복사한 다음 ChatGPT를 사용하여 새로운 기능을 추가하는 스크립트 키디를 추적하고 있었던 것 같습니다. 결과로 얻은 고유 코드는 YouTube 에서 광고하거나 자체 마켓플레이스를 통해 판매할 수 있다는 확신을 갖게 했습니다. 그리고 누구도 그것이 독창적인 창조물이 아니라고 의심하지 않을 것입니다.
이는 흥미로운 질문을 제기합니다. 이 나쁜 행위자를 무엇이라고 불러야 할까요? AI 스크립트 꼬마? 꼬마들아?
ChatGPT에 문의했더니 다음과 같이 말했습니다. 개인이 ChatGPT를 사용하여 악성 코드에 새로운 기능을 추가하는 경우 기존 스크립트 키디보다 더 발전된 유형의 해커로 간주될 수 있습니다. 대신 "해커" 또는 "AI 지원 해커"라고 부르는 것이 더 정확할 수 있습니다.
매력적인.
ChatGPT는 그들에게 더 많은 지위를 부여합니다.
실험을 위해 Carlos는 이 도구가 악의적인 행위자의 활동에 대한 추가 통찰력을 얻는 데 도움이 되는지 확인하기 위해 프롬프트를 시도하고 싶었습니다.
“Discord API를 (토큰 사용) 봇으로 사용할 수 있는 Python 코드가 필요합니다. 스크립트는 봇에 연결되어 길드 정보, 길드원, 길드 채널, 메시지 기록을 표시해야 합니다.”
예상대로 ChatGPT는 시작을 위한 주석이 많은 코드와 명확한 지침을 생성했습니다. 이 코드를 사용하려면 "your_bot_token_here"를 봇 토큰으로 바꾸고 Python 스크립트를 실행하세요 . 그래서 우리는 "AI 지원 해커"가 MicrosoftUpdate.py
에 추가한 토큰을 복사하여 AI 생성 Python 스크립트에 붙여넣었습니다.
우리는 그 코드를 실행했습니다…
…그리고 우리는 거기에 있었습니다! 회원(MEE6, $Demon666, $̷y̷n̷t̷a̷x̷E̷r̷r̷o̷r̷, aitanaxx05 + 4 담당자, Esmeralda, SylexNaranjoDomina 및 AI Image Generator), 채널, 메시지 기록에 대한 정보를 수집했습니다. 알고 보니 그들은 이미 두 명의 사용자를 감염시켰습니다. 우리는 쿠바에서 IP 하나, 인도에서 IP 하나를 식별했습니다. 그리고 OS 정보는 감염된 피해자의 사용자 이름을 딴 채널로 유출되었습니다.
우리는 관리자 권한을 가진 "SylexNaranjoDomina"라는 봇에 연결되어 있음을 발견했습니다. 이를 통해 누군가가 멤버를 추가하거나, 웹후크를 삭제하거나, 기존 채널을 수정할 수 있습니다.
누군가 길드 이름을 "Demon666의 서버"에서 "Script Kiddie의 서버"로 쉽게 변경할 수 있습니다. 이는 이러한 유형의 악당에 대한 적절한 설명이지만 ChatGPT는 그 아이디어에 눈살을 찌푸릴 수도 있다고 생각합니다.
이번 조사를 통해 MaaS의 확산과 AI 지원 코드의 사용이 기술적으로 능숙하지 않은 악의적인 행위자에게 새로운 기회를 창출했다는 것이 분명해졌습니다. 더 많은 사용자가 이러한 도구와 제품을 활용할수록 악성 패키지가 빌드 환경을 감염시킬 기회가 더 많아집니다. 사이버 보안 환경이 계속 발전함에 따라 우리의 방어도 진화해야 합니다. 계속해서 정보를 얻고 주의를 기울이고 보호함으로써 우리는 끊임없이 변화하는 사이버 범죄의 위협에 맞서 한 발 앞서 나갈 수 있습니다.