- 이번 달 MITRE는 ATT&CK 프레임워크에 두 가지 테크닉을 추가할 예정 - 북한이 즐겨 사용하고 있는 공격 전략인 TCC 악용과 팬텀 DLL 하이재킹
내용
- 북한의 해커들은 두 가지 공격 기법을 활용 > 맥OS와 윈도 환경에 불법적으로 접근 및 권한 탈취 > 이후 피해자를 염탐하여 정보 수집 등 필요한 악성 행위 실시
① 맥OS 대상: TCC 악용 - TCC는 일종의 데이터베이스 > 사용자 층위의 데이터베이스: ‘전체 디스크 접근 권한(FDA)’ 혹은 그에 준하는 권한을 가지고 있어야 TCC에 접근가능 > 시스템 층위의 데이터베이스: ‘시스템 무결성 보호(SIP)’라는 기능을 통해 제어가 가능 > TCC에 접근하려면 FDA나 SIP 혹은 그에 상당하는 높은 수준의 권한을 가지고 있어야 한다는 뜻
- 그러나, 권한을 무시하고 접근할 수 있게 해 주는 방법들이 존재 > SIP의 경우 공격자들이 피해자의 시스템에 침투하여 다른 공격 기법을 통해 비활성화시킬 수 있음 > 스스로에게 FDA 권한을 줄 수도 있음
- TCC를 겨냥한 멀웨어들이 이미 다크웹에 여럿 존재 > 가장 중요한 건 SIP를 항상 활성화시켜두는 것이라고 강조
② 윈도우 대상: 팬텀 DLL 하이재킹 (Phantom DLL Hijacking) - 윈도는 실존하지 않는 DLL 파일들을 자꾸만 참조하는 이상한 오류 존재 > 프로젝트를 위해 생성한 DLL을 프로젝트 종료 후 DLL을 전부 삭제하지 못하는 등의 경우 발생 > 윈도는 참조하는데 정작 존재하지는 않는 DLL 파일들을 ‘팬텀 DLL 파일(유령 DLL 파일)’이라고 부름
- 공격자 악용 방식 > 자신들의 목적에 맞는 악성 DLL 파일을 임의로 생성 > 윈도가 참조하고 있는 유령 DLL 파일과 똑같은 이름으로 설정 > 그 DLL 파일과 같은 위치에 옮겨두면 OS가 알아서 로딩 > 윈도가 참조하는 것이므로 보안 경보 울리지 않음
- MS가 직접 윈도의 ‘유령 DLL 참조 현상’을 제거해야 한다고 강조 > 그 전까지 윈도 사용자들은 모니터링을 철저히 수행할 필요 > 애플리케이션 제어도 보다 능동적으로 수행할 필요 > 원격에서 DLL을 로딩시키는 것 또한 차단할 필요
기타
- 라자루스 멀웨어 전략 > TCC 데이터베이스의 접근 테이블을 덤핑하는 기능과 SIP 비활성화 기능 포함 > IKEEXT와 같이 함께 팬텀 DLL 하이재킹 기능 구현: IKEEXT 실행 후 존재하지 않는 DLL 로딩 시도
- 영상 회의 솔루션인 PBX와 기업용 통신 앱(윈도용, 맥OS용, 리눅스용)인 3CX 데스크톱앱을 제공하는 벤더사
2. 취약점
-3CX는전 세계 60만 개 기업이 고객사로 알려져 있으며, 솔루션을 사용하는 사람은 매일 약 1200만 명으로 알려짐
- 다수의 보안 업체에서 3CX 데스크톱앱 바이너리의 정상 업데이트 파일에서 수상한 행동 패턴의 확인을 알렸고, 관련 조사를 통해 확인
- 국내 모 대학에서 공급망 공격이 알려지기 이전에 18.12.407 버전과 18.12.416 버전의 3CX Electron Windows App 설치 로그 확인
- 북한의 라자루스(Lazarus)로 추정되는 해킹 그룹이 CVE-2013-3900 및 고푸람 멀웨어를 이용, 윈도우와 맥 사용자들을 대상으로 3CX의 VoIP 데스크톱 애플리케이션을 침해
고푸람(Gopuram) - 2020년 동남아시아 암호화폐 기업에서 최초 발견된 백도어 - 여러 기능을 가진 모듈을 포함: 데이터 탈취, 추가 멀웨어 설치, 임의 서비스 시작, 종료 및 삭제, 피해자 시스템의 직접 제어 권한 등 - 애플제우스(AppleJeus)라는 또 다른 백도어가 함께 설치 - 고푸람, 애플제우스 모두 라자루스와 연관
영향받는 제품 및 버전 ① Electron Windows application shipped in Update 7 - 18.12.407 - 18.12.416
② Electron macOS application - 18.11.1213 - 18.12.402 - 18.12.407 - 18.12.416
2.1 CVE-2013-3900
- 2013년에 발견되고 패치된 취약점
- 당시 MS의 설명에 따르면, 익스플로잇에 성공한 공격자들은 서명된 실행파일에 악성 코드를 삽입할 수 있게 된다고함
- MS는 윈도 오센티코드(Windows Authenticode)로 서명된 바이너리들의 인증 방식 자체를 변경
> 서명된 바이너리를 누군가 변경하면 해당 바이너리를 더 이상 서명된 바이너리로 윈도우가 인식하지 않도록 한 것
> ‘옵트인’ 방식으로 이루어졌으며, 사용자들이 패치를 적용할 것인지 말 것인지를 선택하도록 함
2.2 공격 방식
- 애플리케이션의 설치 패키지(MSI 파일) 내에 있는 두 개의 DLL이 공격자에 의해 감염
- 3CX의 인증서로 서명되어 있었으며, 자동 업데이트를 통해 DLL 파일을 유포
- 유포된 DLL은 추가 악성 파일을 설치 및 실행하여 정보 유출형 악성코드 인포스틸러 설치
- 공격 방식은 다음과 같음
① 침해된 파일 3CXDesktopApp.exe가 실행되면, DLL Side-Loading 기법으로 ffmpeg.dll이 로드됨
> ffmpeg.dll: d3dcompiler.dll에서 악성쉘 코드를 읽고 로드 및 실행하기 위해 사용되는 트로이목마 DLL
② ffmpeg.dll은 다시 d3dcompiler.dll을 DLL Side-Loading 기법으로 로드
> d3dcompiler.dll: 입력된 16진수 문자열 뒤에 암호화된 쉘코드가 추가된 DLL
③ d3dcompiler.dll은 쉘코드를 복호화해 C2 접근을 위한 ICO 파일이 있는 GitHub 저장소 엑세스
> 3jB(2bsG#@c7 키와 함께 RC4를 사용하여 악성 쉘코드 복호화
> GitHub에 엑세스하지 못하면 프로세스 종료
> GitHub 저장소: raw[.]githubusercontent[.]com/IconStorages/images/main/icon[.]ico_현재는 삭제되어 접속 불가
④ ICO 파일을 이용해 C2 엑세스 시도
- Window
> ICO 파일: Based64 인코딩 및 AES+GCM 암호화 사용
> ICO 파일의 뒷부분에는 실제 C&C 서버의 주소들이 인코딩되어 존재하며, 이를 복호화 할 경우 실제 C&C 서버 주소가 확인
> 다운로더는 ICO 파일의 뒷부분에서 “$” 시그니처를 검색한 후 인코딩된 문자열을 찾아 복호화
- MAC
> 공격자는 DMG 설치 파일에 악성코드를 삽입
> 설치 파일 내부에 존재하는 공유 라이브러리 파일들 중 libffmpeg.dylib 파일에는 C&C 주소가 XOR 인코딩되어 저장되어 있음
⑤ 인포스틸러 멀웨어로 정보 수집
> 지정된 애플리케이션이 아닌 임의 애플리케이션에 의해 로드되면 에러 발생
> 3CXDesktopApp 폴더에서 config.json 파일을 확인하여 호스트 이름, 도메인 이름, OS 버전 정보 수집
> 미리 정의된 문자열 목록을 이용해 Chrome, Edge, Brave 브라우저의 History 및 FireFox의 places.sqlite 정보 수집
2.2.1 DLL Side-Loding 기법
- 안티바이러스 S/W에 의해 탐지되는 것을 우회하여 악성코드를 전파하기 위해 사용하는 기법 중 하나
- 윈도우 OS의 DLL loading 메카니즘을 악용한 기법
- 윈도우 애플리케이션 실행 과정에서 필요한 시점에 동적으로 라이브러리를 호출하는데, 이를 DLL (Dynamic Linking Library)이라 함
- 이때, 필요한 DLL의 이름은 애플리케이션에 따라 내부에 명시되어 있거나, 없을 수도 있음
- 만약 DLL이 애플리케이션 내부에 명시되어 있지 않은 경우 OS에 미리 정의된 순서에 따라 DLL을 찾음
Window OS의 DLL 검색 순서 ① Application이 load 된 Directory ② 현재 Directory ③ 시스템 Directory ④ 16비트 시스템 Directory ⑤ Windows Directory ⑥ PATH 환경 변수에 나열된 Directory
- DLL 검색 순서를 악용해, 특정 애플리케이션이 사용하는 DLL이 아닌 악성코드가 포함된 DLL을 OS가 먼저 검색하여 실행하도록하는 기법
- 단, 악성 DLL의 이름은 정상 DLL의 이름과 동일해야 함
3. 조사 보고서
- MANDIANT는 해당 사건에 대한 분석 보고서를 발표
- 해당 공격은 과거 발생한 1차 공급망 공격이 2차 공급망 공격으로 이어진 최초의 사례
3.1 내용 요약
① 최초 침입 벡터: 트레이딩 테크놀로지스(Trading Technologies) 소프트웨어 엑스트레이더(X_TRADER) 설치 패키지
- 엑스트레이더는 금융거래를 목적으로 사용하는 소프트웨어
- 공격자는 모종의 사유로 트레이딩 테크놀로지스를 침해해 엑스트레이더 설치 패키지를 감염
> 공격에 사용된 파일명: X_TRADER_r7.17.90p608.exe (MD5: ef4ab22e565684424b4142b1294f1f4d)
> 엑스트레이더는 2020년 서비스가 종료되었지만, 웹 사이트에서 2022년에도 다운로드가 가능했음
> 또한, 감염된 소프트웨어에를 서명하는데 사용된 인증서는 2022.10 만료되도록 설정
② 3CX 직원이 감염된 설치 패키지 다운 및 실행
- 감염된 소프트웨어 설치파일 setup.exe를 실행 및 악성 파일이 추출되어 백도어 설치
> SIGFLIP: RC4로 페이로드를 해독하고 바이트 시퀀스 FEEDFACE를 사용하여 쉘코드 검색
> DAVESHELL: 드로퍼 역할을 수행하는 쉘코드
> VEILEDSIGNAL (MD5: c6441c961dcad0fe127514a918eaabd4): C2 통신을 위한 백도어로, C2 주소 하드코딩
③ 공격자의 내부 이동 및 공격 지속성 유지
- 백도어와 오픈 소스 FRP를 이용해 3CX 내부를 이동하며 자격 증명을 수집
> FRP: NAT 또는 방화벽 뒤에 있는 로컬 서버를 인터넷에 노출할 수 있는 빠른 역방향 프록시
- 공격을 지속하기 위해 추가작업 수행
> Window: Taxhaul 멀웨어로 DLL 사이드로딩을 사용하여 지속성을 달성하고 탐지 가능성을 줄이며, Coldcat 다운로더를 배포
> Mac: POOLRAT 백도어로 지속성 달성
④ UNC4736 공격 그룹
> 3CX 공급망 공격과 트레이딩 테크놀로지스 공급망 공격의 배후를 모두 북한 해킹그룹으로 추정되는 UNC4736로 지목
⑤ 3CX는 공격을 탐지하는 데 사용할 수 있는 YARA 규칙 및 IoC 공유
4. 대응방안
① 벤더사 관련 공지 참고
> 3CX에서는 현재 새로운 인증서 발급 준비 중이며, 인증서 발급 전까지 PWA 애플리케이션을 대신 사용할 것을 권장
- 작년말 북한이 해당 S/W의 취약점을 악용해 PC 해킹 및 악성코드 유포 등 해킹한 사실이 국정원·경찰청·KISA 등 유관기관에 의해 적발
- 국가·공공기관 및 방산·바이오업체 등 국내외 주요기관 60여곳의 PC 210여대를 해킹한 사실을 확인
- 해킹에 악용된 S/W는 국내외 1,000만대 이상의 기관·업체·개인 PC에 설치되어 있는 것으로 추정
- 대규모 피해 확산 방지를 위해 관계기관과 합동으로 관련 사실을 공지
영향받는 버전 - INISAFE CrossWeb EX V3 3.3.2.40 이하 버전
2.1 취약점 상세
- 해당 취약점은 INITECH사 프로세스(inisafecrosswebexsvc.exe)에 의해 악성 행위가 발생되는 것으로 확인됨
피해 시스템의 inisafecrosswebexsvc.exe 특징
- INITECH사의 보안 프로그램인 INISAFE CrossWeb EX V3의 실행 파일 - 정상 파일과 같은 해시값을 가짐 (MD5:4541efd1c54b53a3d11532cb885b2202) - INITECH사에 의해 정상 서명된 파일 - INISAFE Web EX Client로 침해 시점 이전부터 시스템에 설치되어 있었으며, 변조의 흔적 또한 발견되지 않음 - 시스템 부팅 시 iniclientsvc_x64.exe에 의해 실행되는데, 침해 당일에도 같은 방식으로 실행
- 악성코드인 SCSKAppLink.dll이 inisafecrosswebexsvc.exe 프로세스에 인젝션되어 동작
※ DLL 인젝션: 다른 프로세스의 주소 공간 내에서 DLL을 강제로 로드시킴으로써 코드를 실행시키는 기술
- SCSKAppLink.dll에는 호스트 프로세스에 따라 분기하는 코드가 포함
- 분기 코드는 inisafecrosswebexsvc.exe 프로세스에 인젝션되어 동작하는 경우 특정 C2에 접속하여 추가 악성코드를 다운 및 실행
※ svchost.exe, rundll32.exe, notepad.exe에 인젝션 여부를 판단하도록 돼있으나, 해당 분기문에는 실행 코드가 포함되지 않음
- C2에 접속하여 임시폴더에 악성코드 main_top[1].htm 다운로드 후 특정 경로에 복사
> 다운로드 경로 : c:\users\<사용자>\appdata\local\microsoft\windows\inetcache\ie\zlvrxmk3\main_top[1].htm
> 복사된 경로 : C:\Users\Public\SCSKAppLink.dll
3. 대응방안
① 서비스 운영자: 이니텍를 통해 최신버전 교체_INISAFE CrossWeb EX V3 3.3.2.41
② 제품 사용자: 취약한 버전이 설치되어 있는 경우 제거 후 최신버전 업데이트를 진행
> [제어판]-[프로그램]-[프로그램 및 기능]에서 INISAFE CrossWeb EX V3 버전 확인 후 제거 클릭
> 아래 링크를 참고하여, 운영체제에 맞는 최신 버전의 INISAFE CrossWeb EX V3를 설치
- 개인 소유의 스마트기기 또는 모바일 장비를 이용해 회사 데이터베이스와 애플리케이션 등에 액세스해서 업무를 처리하는 것을 의미
- 기업은 하드웨어 교체 비용, 소프트웨어 라이선스 구입 및 유지 비용 등을 절감 가능
- 장소나 시간에 관계 없이 개인 기기에서 자유롭게 업무 문서를 열람 가능하여 생산성과 업무 속도 개선
2. BYOVD (Bring Your Own Vulerable Device)
- BYOD (Bring Your Own Device)에서 파생된 단어로, 취약점이 존재하는 드라이버를 포함하고 있는프로그램을 악용
> 최신 윈도우 운영체제에서는 더 이상 서명되지 않은 드라이버 로드는 불가
> 그러나, 합법적으로 서명된 드라이버 모듈은 로드할 수 있음
> 이러 악용하여 취약한 공급업체의 드라이버 모듈로 커널 메모리를 조작
- 합법적인 서명을 포함하고 있어 윈도 운영체제에서 정상적으로 구동되지만 사실은 취약점이 있는 드라이버를 활용해 공격 대상의 시스템에 접근 권한을 얻는 방식의 공격 기법
- 즉, 개인의 기기에 설치된 특정 소프트웨어의 보안패치가 미적용된 환경을 이용하는 공격 유형
- 드라이버의 권한을 이용하므로 커널 메모리 영역에 읽고 쓰는 것이 가능해, 백신 및 PC 모니터링 시스템 등도 무력화 가능
2.1 북한 라자루스 그룹의 ene.sys 드라이버를 악용한 루트킷 배포 [1]
- ENE Technology에서 제작한 ene.sys 드라이버 모듈은 오픈소스인 WinIO 라이브러리로 작성됨
- 유저 영역에서 커널의 물리 메모리와 I/O 포트에 직접 접근을 가능하게 해주는 모듈
- 드라이버의 물리 메모리 접근 방식은 “ZwMapViewOfSection” API를 통한 공유 메모리 매핑 방식
- 메모리 매핑은 드라이버의 기능에 따라 필요 여부가 나뉘지만, 해당 기능을 사용하려면 드라이버를 호출하는 프로세스에 대한 검증이 철저히 이루어져야 함
2.1.1 호출 프로세스 검증 로직
① SB_SMBUS_SDK.dll 모듈 로드 검증
- ene.sys는 드라이버 실행 시점에 “PsSetLoadImageNotifyRoutine” API를 호출하여 모듈 처리와 관련된 콜백 루틴을 커널에 등록
- 콜백루틴은 프로세스가 로드하는 모듈이 SB_SMBUS_SDK.dll 인지 확인하고, 맞다면 해당 프로세스를 신뢰할 수 있는 프로세스로 인지하여 PID 정보를 ene.sys 전역변수에 저장
- 신뢰할 수 있는 프로세스가 되어 프로세스와 ene.sys 간 IOCTL 통신을 할 수 있게됨
※ IOCTL
> 컴퓨터 사용자와 커널을 잇는 인터페이스의 일부
> 사용자 공간의 코드가 하드웨어 장치, 커널 구성 요소와 통신할 수 있게 도와주는 역할
② AES 암호화가 이용된 IOCTL 통신 및 호출시간 검증
- 유저 영역의 프로세스가 ene.sys에 물리 메모리 매핑을 요청하기 위해서는 특정 IOCTL 값 (0x80102040) 과 _WINIO_PHYSICAL_MEMORY_INFO_EX 구조체 정보를 드라이버에 전달하여 검증을 받음
typedef struct
_WINIO_PHYSICAL_MEMORY_INFO_EX {
중략
ULONG_PTR BusAddress; // 메모리 매핑을 원하는 물리 메모리 주소
중략
UCHAR EncryptedKey[16]; // 현재 시간 값에 대한 AES-ECB로 암호화한 값
} WINIO_PHYSICAL_MEMORY_INFO_EX, *
PWINIO_PHYSICAL_MEMORY_INFO_EX;
- 검증은 구조체 중 EncryptedKey변수를 이용하며, IOCTL 호출 시점의 시각과 IOCTL을 드라이버로부터 전달받아 처리한 시간의 차이가 2ms 미만일 경우유효한 것으로 인지 후 IOCTL 처리
- ene.sys 드라이버 모듈은 유저 영역에서 물리 메모리 영역 매핑과 관련된 다음 취약점이 존재
- 루트킷 자체는 로더 내 DLL로 위치하여 실행 시 ene.sys를 이용해 루트킷의 PreviousMode 주소 값을 0으로 변조
> PreviousMode 값이 0일 경우 God Mode로, 유저 영역과 커널 영역 모두 사용이 가능함
- 이후 공격자는 커널 메모리를 조작하여 시스템 내 보안 시스템을 무력화 등 악성행위 수행
PreviousMode - 유저 영역에서 동작하는 프로세스가 Nt 또는 Zw 계열의 함수를 호출할 경우 - Zw 계열의 함수는 동일한 기능을 수행하는 Nt 계열의 함수로 매핑 - Nt 계열의 함수는 호출한 드라이브가 유저 영역에서 호출한 것인지, 커널 영역에서 호출한 것인지를 확인 - 호출 위치를 판단하는데 PreviousMode 필드의 값을 통해 결정 - 호출 위치가 유저 영역일 경우 유저 영역의 메모리를 사용하게되고, 커널 영역일 경우 유저 영역과 커널 영역 모두 사용 가능함
3. 대응방안
① 엄격하게 드라이버 로드를 차단
- 일반 사용자 환경에서는 드라이버 로드를 하지 못하도록 통제
- MS는 윈도우 업데이트로 제공하는 취약 드라이버 차단 목록(Microsoft Vulnerable Driver Blocklist)과 HVCI(Hypervisor-Protected Code Integrity)를 통해 확인된 보안 취약점이 있는 드라이버가 기본적으로 차단
> 여러 보안 업체는 윈도우에 대한 계속되는 BYOD 공격과 취약한 드라이버 차단 목록이 정기적으로 업데이트되지 않는 것을 발견