2021.07.30

프레잉 맨티스, 역직렬화 결함과 메모리 상주 악성코드로 IIS 웹 서버 공격

Lucian Constantin |
정부의 후원을 받는 것으로 보이는 한 정교한 위협 집단이 지난 해에 주요 공공 및 민간 단체를 해킹해왔다. 이 공격 집단은 오픈소스 웹 프레임워크인 ASP.NET 애플리케이션의 역직렬화 결함(Deserializaion flaws)을 이용해 파일 없는 악성코드(fileless malware)를 전개했다. 
 
ⓒ Getty Images Bank

사건 대응 업체인 시그니아(Sygnia)의 연구진은 프레잉 맨티스(Praying Mantis)나 TG1021이라고 부르는 이 해커 집단은 인터넷 정보 서비스(Internet Information Services, IIS) 웹 서버를 특정적으로 노리는 휘발성의 커스텀 악성코드 툴셋을 이용해 탐지를 회피하는 데 중점을 둔다. 이를 통해 계정 추출(credential harvesting), 정찰(reconnaissance), 내부 이동(lateral movement)을 수행한다. 

시그니아의 연구진은 상세 보고서에서 “활동과 범죄 수법의 성질을 보면 TG1021은 경험이 많고 은밀한 행위자이며, OPSEC(운영 보안)을 아주 잘 알고 있다”면서, “TG1021이 사용한 악성코드는 로깅 메커니즘을 적극적으로 방해해 상용 EDR을 성공적으로 회피하고, 아울러 C&C(Command and Control) 서버로 다시 연결해 지속적으로 트래픽을 생성하기보다는 연결이 유입되기를 조용히 기다림으로써 탐지를 회피하는 상당한 노력을 보여준다. 더욱이 이 위협 행위자는 모든 디스크 상주 도구를 사용 후 제거함으로써 은밀함의 대가로 지속성을 사실상 포기했다”라고 분석했다.

 
구식이지만 최신의 역직렬화 익스플로잇 

프로그래밍에서 직렬화(Serialization)는 데이터를 바이트 스트림으로 변환하는 과정이고, 일반적으로 유선을 통해 이를 전송한다. 역직렬화는 직렬화의 반대 과정이고 대다수의 데이터 파싱 작업과 마찬가지로 사용자가 입력을 통제하는 경우 취약점의 원인일 수 있다. 불안전한 역직렬화 결함은 여러 해 동안 자바 애플리케이션에서 만연했지만, 자바는 역직렬화가 보편적인 유일한 프로그래밍 언어는 아니다.
 
프레잉 맨티스가 악용한 취약점은 ASP.NET 내의 역직렬화 구현물을 표적으로 한다. ASP.NET은 윈도우 IIS 웹 서버 상에서 호스팅 되는 웹 앱의 개발을 위한 오픈소스 프레임워크이다. 

ASP.NET은 VIEWSTATE라는 메커니즘을 가지고 있고, 이는 POST 요청 중에 클라이언트에 발송될 때 웹 페이지의 상태와 제어 수단을 저장하는 데 사용된다. 이는 _VIEWSTATE라는 숨겨진 입력 필드로서 저장된다. 클라이언트가 POST 동작을 수행해 페이지를 서버로 반송할 때 VIEWSTATE는 역직렬화 되어 검증된다. ASP.NET은 몇몇 보안 및 무결성 검사 메커니즘을 통해 직렬화 데이터의 유효성을 보장하지만, 이의 올바른 이용은 개발자의 구현에 좌우된다. 

프레잉 맨티스는 사용자 설문조사의 이행에 쓰이는 체크박스(Checkbox)라는 ASP.NET 애플리케이션의 불안전한 역직렬화에 기인한 원격 코드 실행(RCE) 취약점을 악용했다. 이 해커 집단의 공격 시점에, 이 결함은 제로데이 상태였고, VIEWSTATE 기능의 커스텀 구현물을 사용했던 체크박스의 버전 6 또는 그 이전 버전에 영향을 주었다. 체크박스 버전 7은 2019년부터 이용할 수 있었고 영향을 받지 않지만, 체크박스 버전 6에 대한 공식 지원은 7월 1일까지 종료되지 않았다. 

CERT/CC는 5월의 한 보고서에서 “버전 7.0 이전에 체크박스 서베이는 a_VSTATE 매개변수를 수용함으로써 자체적으로 VIEWSTATE 기능을 구현하고, 이는 로스포매터(LosFormatter)을 이용해 역직렬화 된다”면서 “이 데이터는 체크박스 서베이 코드에 의해 수동으로 처리되기 때문에 서버에 있는 ASP.NET VIEWSTATE 메시지 인증 코드(MAC) 설정이 무시된다. MAC가 없다면 공격자는 임의 코드를 생성해 역직렬화 후 임의 코드 실행을 할 수 있다”라고 말했다. 

프레잉 맨티스는 역직렬화 결함을 전반적으로 잘 이해하고 있었으며, 내부 확산 및 지속을 위해 여러 방식으로 이를 악용했다. 예를 들어 최신 ASP.NET 버전들은 VIEWSTATE 무결성 검사 및 암호화를 지원하지만, 암호화 및 인증 키가 절취되거나 유출된 경우 이는 서버를 재감염시키거나 동일한 애플리케이션을 호스팅하는 동일 클러스터 내의 다른 서버를 감염시키는 데 사용될 수 있다. 이들 비밀 키는 공유되기 때문이다. 

연구진은 “시그니아의 조사 중에 TG1021은 탈취한 복호화 및 검증 키를 이용해 IIS 웹 서버를 해킹했다”면서, “VIEWSTATE 역직렬화 익스플로잇의 흐름은 앞서 설명한 VSTATE 익스플로잇과 거의 동일하다. 다만 VIEWSTATE 데이터를 압축하는 것이 아니라 이의 암호화와 서명을 조정한다”라고 말했다.
 
이 공격 집단은 직렬화가 의존하는 세션 저장 메커니즘 역시 악용했다. ASP.NET은 애플리케이션이 MSSQL 데이터베이스에 사용자 세션을 직렬화 된 객체로 저장한 후 고유한 쿠키를 할당하는 것을 허용한다. 사용자의 브라우저가 애플리케이션을 다시 방문해 이 저장된 쿠키 가운데 하나를 가지고 있을 때 애플리케이션은 이에 상응하는 세션 객체를 데이터베이스로부터 로드해 역직렬화 한다.  

공격자들은 내부 확산을 위해 이 기능을 악용했다. 이전의 취약점을 통해 훼손된 IIS 웹 서버로 접근해 악성 세션 객체와 연관 쿠키를 생성하고 이를 마이크로소프트 SQL 데이터베이스에 저장했다. 

그 후 동일한 인프라에 속하고 동일한 데이터베이스를 이용하는 다른 IIS 서버에 요청을 발송하고 요청 내에 악성 쿠키를 포함시켰다. 이는 애플리케이션 인스턴스가 악의적으로 조작된 세션 객체를 로드해 역직렬화 한 후 이들 서버에서 실행하도록 강제했고, 이는 원격 코드 실행(RCE)으로 이어졌다.
 
프레잉 맨티스는 다른 앱에 있는 역직렬화 취약점 역시 악용한 것으로 밝혀졌다. 예를 들어 CVE-2019-18935이다. 이는 JSON 파싱에서 불안전한 역직렬화에 기인한 RCE 결함이고 ASP.NET AJAX를 위한 텔레릭 UI(Telerik UI)에 영향을 준다. 

텔레릭은 웹 애플리케이션에서 널리 쓰이는 이용자 인터페이스 컴포넌트 스위트이다. 텔레릭에 영향을 주는 오래된 임의 파일 업로드의 결함에 대한 (CVE-2017-11317) 익스플로잇 역시 이 공격 집단에 의해 사용됐다. 


IIS 전용으로 제작된 악성코드 프레임워크 

이 공격자들은 이 RCE 취약점들을 악용해 취약한 웹 서버의 메모리에 악성 DLL을 반영적으로 로드했다. 그 후 이 DLL은 연구진이 'NodeIISWeb'라고 부르는 악성 컴포넌트를 w3wp.exe 프로세스에 로드했다. 이는 구성된 IIS 애플리케이션 풀을 위해 IIS 웹 서버로 발송된 웹 요청을 처리하는 IIS 작업 프로세스다. 

반영적 로딩(reflective loading)은 악성 DLL을 기존 프로세스에 주입해 이의 기능을 연결시키는 기법이다. 이 기법의 장점은 DLL을 런타임 시 모듈로서 등록하는 등 특정 윈도우 메커니즘을 우회하고 파일이 디스크에 실제로 써지지 않는다는 점이다. 

단점은 감염 지속성이 없다는 것이다. 악성 DLL은 RAM에만 머무르기 때문에 상위 프로세스가 재시작하면 사라진다. 프로덕션 웹 서버는 장시간 가동되기 때문에 이는 해킹을 은닉하는 데 효과적인 수법이다.
 
반영적 DLL 로더 대신, 프레잉 맨티스는 간혹 NodeIISWeb을 로드하는데 웹 셸(web shell)을 이용하기도 한다. 이는 역직렬화에 기반한 원격 코드 실행 취약점이 아니라 CVE-2017-11317 같은 파일 업로드 취약점을 이용 중일 때 더 일반적이다. 

웹 셸은 서버의 파일 시스템에 업로드되는 악성 웹 스크립트/애플리케이션으로 HTTP를 통해 원격으로 접근이 가능하기 때문이다. 프레잉 맨티스의 웹 셸은 단명한 것이 보통이다. NodeIISWeb가 전개된 후 이를 제거하기 때문이다.

NodeIISWeb 악성코드는 IIS 입력 검증 기능에 연결되어 서버로 유입되는 모든 HTTP 트래픽을 읽을 수 있다. 이에 의해 공격자는 악성코드가 기대하고 모니터한 특정한 쿠키 이름과 값으로 조작된 요청을 서버에 발송해 악성코드를 제어할 수 있다. 

공격자는 이 HTTP 메커니즘으로 명령을 발송할 수 있기 때문에 NodeIISWeb는 C&C 서버로 나가는 연결을 생성하지 않는다. 이는 트래픽 모니터링 프로그램이 검출할 가능성이 있는 연결이다. 

이제 악성코드 프로그램은 TCP, HTTP, SQL에 대한 몇 가지 트래픽 포워딩 방식을 이행한다. 이는 동일한 네트워크 내의 해킹된 서버 상에서 실행되는 다른 악성코드 인스턴스를 위한 프록시 내지 C&C 역할을 하고, 이는 인터넷에 직접 노출되지 않는다. 또한 자바스크립트 페이로드를 실행할 수 있고, 이의 기능을 확장하는 추가적인 DLL 모듈을 로드할 수 있다.
 
NodeIISWeb는 흔히 ExtDLL.dll이라고 불리는 또 다른 맞춤형 윈도우 백도어를 전개하는 데 사용되고, 백도어는 파일과 디렉토리를 조작하고, 시스템 정보를 수집하고, DLL을 실행하고, 코드 주입, 토큰 조작 등 다양한 공격 기법을 이행하는 데 쓰일 수 있다. 또한 시스템 상의 다양한 보안 기능에 연결되어 이를 조작하며 활동을 숨긴다. 예를 들어 AV 스캐닝 기능, 이벤트 로그 보고 기능, .NET 코드 신뢰성 검사, 파워셸(PowerShell) 연관 레지스트리 키 등이다.
 
NodeIISWeb와 ExtDLL.dll에 의해 로드되는 추가적 DLL 모듈 가운데 하나는 PSRunner.dll이라 불리고, 이는 파워셸 프로세스를 발생시키지 않으면서 호스트 상에서 파워셸 스크립트 실행을 허용한다. 또한 Forward.dll이라는 모듈은 HTTP 트래픽 포워딩 기능을 이행한다. 

PotatoEx.dll은 권한 상승 도구이자 액티브 디렉토리 매핑 툴이다. E.dll은 커스텀 HTTP 반응을 생성해 공격자가 익스플로잇이 표적 IIS 서버에서 성공적으로 실행되었음을 확인할 수 있게 해준다. 

프레잉 맨티스는 해킹된 IIS 서버로 접근해 애플리케이션의 로그인 페이지를 수정해 사용자 인증정보를 포획해 별개의 파일에 저장했다. 아울러 디스크에 흔적을 남기지 않으면서 메모리로 직접 로드되는 샤프하운드(SharpHound), 파워스플로잇(PowerSploit) 등 공개적으로 이용할 수 있는 공격 보안 도구(offensive security tools)을 전개했다. 

이 공격 집단은 해킹된 도메인 인증정보를 이용해 SMB 포트를 통해 내부 서버 상의 공유 폴더에 접근하기도 했다. 


프레잉 맨티스를 탐지, 예방하는 방법

프레잉 맨티스의 활동을 탐지하기는 쉽지 않다. 메모리 상주 악성코드의 휘발성과 이들의 보안에 대한 경계 때문이다. 시그니아 연구진은 .NET 역직렬화 취약점을 패치하고, 이 보고서에 나온 감염 징후들을 포착하고, 이 공격 집단의 도구를 탐지하도록 설계된 YARA 규칙으로 IIS 서버를 스캔하고, IIS 환경에서 수상한 활동을 적극적으로 추적하라고 권고했다.
 
ASP.NET VIEWSTATE 또는 이의 맞춤형 구현물의 이용을 검증하는 일은 (체크박스 서베이 내 압축된 VSTATE 등) VIEWSTATE 역직렬화 결함으로부터 ASP.NET 애플리케이션을 보호하는 데 결정적이다. 

IIS 구성 안의 enableViewStataMac 변수는 ‘참(True)’으로 설정되어야 하고, aspnet:AllowInsecureDeserialization 변수는 ‘거짓(False)’으로 설정되어야 한다. 

레지스트리 키 AspNetEnforceViewStateMac는 ‘1’로 설정되어야 하고 암호화 및 검증 키는 주의깊게 관리되어야 한다. 서버는 IIS 서버 상에서 자동 생성 키 또는 머신 키를 사용해야 하고, 정기적으로 교대되어 탈취되거나 유출된 키에 의한 악용 가능성을 줄여야 한다.
 
시그니아 측은 “ASP.NET 세션 상태가 웹 애플리케이션에 의해 사용될 때 데이터베이스 접근이 정당한 네트워크 위치에서만 이뤄질 수 있도록 해야 한다”면서 “상이한 IIS 서버/웹 애플리케이션의 세션 상태 MSSQL 데이터베이스를 가급적 분리하거나, SQL 사용자에게 적정한 최소한의 CRUD 허가를 생성하라. .NET 웹 애플리케이션이 최소한의 권한을 가진 지정된 애플리케이션 집합 ID와 함께 실행 중임을 확인하라. 이는 TG1021에게 추가적인 장애를 생성할 것이다”라고 권고했다.
 
시그니아의 보고서 외에도 호주 정부의 사이버 보안 센터(Cyber Security Center, ACSC)가 지난 해 출간한 권고안이 있다. 여기에는 시그니아가 관찰한 프레잉 맨티스 활동과 부분적으로 중복되는 해킹 징후 및 공격 기법이 포함되어 있다. 

이 권고안은 그 당시 ACSC가 ‘정교한 국가 기반 행위자의 호주 정부 및 기업에 대한 지속적인 표적 공격’이라고 불렀던 행위에 대한 대응으로 게시되었다. ACSC는 “이는 호주 정부가 지금까지 관찰한 호주 기관에 대한 가장 심각하고 조직적인 사이버 공격이다”라고 말했다. editor@itworld.co.kr 


2021.07.30

프레잉 맨티스, 역직렬화 결함과 메모리 상주 악성코드로 IIS 웹 서버 공격

Lucian Constantin |
정부의 후원을 받는 것으로 보이는 한 정교한 위협 집단이 지난 해에 주요 공공 및 민간 단체를 해킹해왔다. 이 공격 집단은 오픈소스 웹 프레임워크인 ASP.NET 애플리케이션의 역직렬화 결함(Deserializaion flaws)을 이용해 파일 없는 악성코드(fileless malware)를 전개했다. 
 
ⓒ Getty Images Bank

사건 대응 업체인 시그니아(Sygnia)의 연구진은 프레잉 맨티스(Praying Mantis)나 TG1021이라고 부르는 이 해커 집단은 인터넷 정보 서비스(Internet Information Services, IIS) 웹 서버를 특정적으로 노리는 휘발성의 커스텀 악성코드 툴셋을 이용해 탐지를 회피하는 데 중점을 둔다. 이를 통해 계정 추출(credential harvesting), 정찰(reconnaissance), 내부 이동(lateral movement)을 수행한다. 

시그니아의 연구진은 상세 보고서에서 “활동과 범죄 수법의 성질을 보면 TG1021은 경험이 많고 은밀한 행위자이며, OPSEC(운영 보안)을 아주 잘 알고 있다”면서, “TG1021이 사용한 악성코드는 로깅 메커니즘을 적극적으로 방해해 상용 EDR을 성공적으로 회피하고, 아울러 C&C(Command and Control) 서버로 다시 연결해 지속적으로 트래픽을 생성하기보다는 연결이 유입되기를 조용히 기다림으로써 탐지를 회피하는 상당한 노력을 보여준다. 더욱이 이 위협 행위자는 모든 디스크 상주 도구를 사용 후 제거함으로써 은밀함의 대가로 지속성을 사실상 포기했다”라고 분석했다.

 
구식이지만 최신의 역직렬화 익스플로잇 

프로그래밍에서 직렬화(Serialization)는 데이터를 바이트 스트림으로 변환하는 과정이고, 일반적으로 유선을 통해 이를 전송한다. 역직렬화는 직렬화의 반대 과정이고 대다수의 데이터 파싱 작업과 마찬가지로 사용자가 입력을 통제하는 경우 취약점의 원인일 수 있다. 불안전한 역직렬화 결함은 여러 해 동안 자바 애플리케이션에서 만연했지만, 자바는 역직렬화가 보편적인 유일한 프로그래밍 언어는 아니다.
 
프레잉 맨티스가 악용한 취약점은 ASP.NET 내의 역직렬화 구현물을 표적으로 한다. ASP.NET은 윈도우 IIS 웹 서버 상에서 호스팅 되는 웹 앱의 개발을 위한 오픈소스 프레임워크이다. 

ASP.NET은 VIEWSTATE라는 메커니즘을 가지고 있고, 이는 POST 요청 중에 클라이언트에 발송될 때 웹 페이지의 상태와 제어 수단을 저장하는 데 사용된다. 이는 _VIEWSTATE라는 숨겨진 입력 필드로서 저장된다. 클라이언트가 POST 동작을 수행해 페이지를 서버로 반송할 때 VIEWSTATE는 역직렬화 되어 검증된다. ASP.NET은 몇몇 보안 및 무결성 검사 메커니즘을 통해 직렬화 데이터의 유효성을 보장하지만, 이의 올바른 이용은 개발자의 구현에 좌우된다. 

프레잉 맨티스는 사용자 설문조사의 이행에 쓰이는 체크박스(Checkbox)라는 ASP.NET 애플리케이션의 불안전한 역직렬화에 기인한 원격 코드 실행(RCE) 취약점을 악용했다. 이 해커 집단의 공격 시점에, 이 결함은 제로데이 상태였고, VIEWSTATE 기능의 커스텀 구현물을 사용했던 체크박스의 버전 6 또는 그 이전 버전에 영향을 주었다. 체크박스 버전 7은 2019년부터 이용할 수 있었고 영향을 받지 않지만, 체크박스 버전 6에 대한 공식 지원은 7월 1일까지 종료되지 않았다. 

CERT/CC는 5월의 한 보고서에서 “버전 7.0 이전에 체크박스 서베이는 a_VSTATE 매개변수를 수용함으로써 자체적으로 VIEWSTATE 기능을 구현하고, 이는 로스포매터(LosFormatter)을 이용해 역직렬화 된다”면서 “이 데이터는 체크박스 서베이 코드에 의해 수동으로 처리되기 때문에 서버에 있는 ASP.NET VIEWSTATE 메시지 인증 코드(MAC) 설정이 무시된다. MAC가 없다면 공격자는 임의 코드를 생성해 역직렬화 후 임의 코드 실행을 할 수 있다”라고 말했다. 

프레잉 맨티스는 역직렬화 결함을 전반적으로 잘 이해하고 있었으며, 내부 확산 및 지속을 위해 여러 방식으로 이를 악용했다. 예를 들어 최신 ASP.NET 버전들은 VIEWSTATE 무결성 검사 및 암호화를 지원하지만, 암호화 및 인증 키가 절취되거나 유출된 경우 이는 서버를 재감염시키거나 동일한 애플리케이션을 호스팅하는 동일 클러스터 내의 다른 서버를 감염시키는 데 사용될 수 있다. 이들 비밀 키는 공유되기 때문이다. 

연구진은 “시그니아의 조사 중에 TG1021은 탈취한 복호화 및 검증 키를 이용해 IIS 웹 서버를 해킹했다”면서, “VIEWSTATE 역직렬화 익스플로잇의 흐름은 앞서 설명한 VSTATE 익스플로잇과 거의 동일하다. 다만 VIEWSTATE 데이터를 압축하는 것이 아니라 이의 암호화와 서명을 조정한다”라고 말했다.
 
이 공격 집단은 직렬화가 의존하는 세션 저장 메커니즘 역시 악용했다. ASP.NET은 애플리케이션이 MSSQL 데이터베이스에 사용자 세션을 직렬화 된 객체로 저장한 후 고유한 쿠키를 할당하는 것을 허용한다. 사용자의 브라우저가 애플리케이션을 다시 방문해 이 저장된 쿠키 가운데 하나를 가지고 있을 때 애플리케이션은 이에 상응하는 세션 객체를 데이터베이스로부터 로드해 역직렬화 한다.  

공격자들은 내부 확산을 위해 이 기능을 악용했다. 이전의 취약점을 통해 훼손된 IIS 웹 서버로 접근해 악성 세션 객체와 연관 쿠키를 생성하고 이를 마이크로소프트 SQL 데이터베이스에 저장했다. 

그 후 동일한 인프라에 속하고 동일한 데이터베이스를 이용하는 다른 IIS 서버에 요청을 발송하고 요청 내에 악성 쿠키를 포함시켰다. 이는 애플리케이션 인스턴스가 악의적으로 조작된 세션 객체를 로드해 역직렬화 한 후 이들 서버에서 실행하도록 강제했고, 이는 원격 코드 실행(RCE)으로 이어졌다.
 
프레잉 맨티스는 다른 앱에 있는 역직렬화 취약점 역시 악용한 것으로 밝혀졌다. 예를 들어 CVE-2019-18935이다. 이는 JSON 파싱에서 불안전한 역직렬화에 기인한 RCE 결함이고 ASP.NET AJAX를 위한 텔레릭 UI(Telerik UI)에 영향을 준다. 

텔레릭은 웹 애플리케이션에서 널리 쓰이는 이용자 인터페이스 컴포넌트 스위트이다. 텔레릭에 영향을 주는 오래된 임의 파일 업로드의 결함에 대한 (CVE-2017-11317) 익스플로잇 역시 이 공격 집단에 의해 사용됐다. 


IIS 전용으로 제작된 악성코드 프레임워크 

이 공격자들은 이 RCE 취약점들을 악용해 취약한 웹 서버의 메모리에 악성 DLL을 반영적으로 로드했다. 그 후 이 DLL은 연구진이 'NodeIISWeb'라고 부르는 악성 컴포넌트를 w3wp.exe 프로세스에 로드했다. 이는 구성된 IIS 애플리케이션 풀을 위해 IIS 웹 서버로 발송된 웹 요청을 처리하는 IIS 작업 프로세스다. 

반영적 로딩(reflective loading)은 악성 DLL을 기존 프로세스에 주입해 이의 기능을 연결시키는 기법이다. 이 기법의 장점은 DLL을 런타임 시 모듈로서 등록하는 등 특정 윈도우 메커니즘을 우회하고 파일이 디스크에 실제로 써지지 않는다는 점이다. 

단점은 감염 지속성이 없다는 것이다. 악성 DLL은 RAM에만 머무르기 때문에 상위 프로세스가 재시작하면 사라진다. 프로덕션 웹 서버는 장시간 가동되기 때문에 이는 해킹을 은닉하는 데 효과적인 수법이다.
 
반영적 DLL 로더 대신, 프레잉 맨티스는 간혹 NodeIISWeb을 로드하는데 웹 셸(web shell)을 이용하기도 한다. 이는 역직렬화에 기반한 원격 코드 실행 취약점이 아니라 CVE-2017-11317 같은 파일 업로드 취약점을 이용 중일 때 더 일반적이다. 

웹 셸은 서버의 파일 시스템에 업로드되는 악성 웹 스크립트/애플리케이션으로 HTTP를 통해 원격으로 접근이 가능하기 때문이다. 프레잉 맨티스의 웹 셸은 단명한 것이 보통이다. NodeIISWeb가 전개된 후 이를 제거하기 때문이다.

NodeIISWeb 악성코드는 IIS 입력 검증 기능에 연결되어 서버로 유입되는 모든 HTTP 트래픽을 읽을 수 있다. 이에 의해 공격자는 악성코드가 기대하고 모니터한 특정한 쿠키 이름과 값으로 조작된 요청을 서버에 발송해 악성코드를 제어할 수 있다. 

공격자는 이 HTTP 메커니즘으로 명령을 발송할 수 있기 때문에 NodeIISWeb는 C&C 서버로 나가는 연결을 생성하지 않는다. 이는 트래픽 모니터링 프로그램이 검출할 가능성이 있는 연결이다. 

이제 악성코드 프로그램은 TCP, HTTP, SQL에 대한 몇 가지 트래픽 포워딩 방식을 이행한다. 이는 동일한 네트워크 내의 해킹된 서버 상에서 실행되는 다른 악성코드 인스턴스를 위한 프록시 내지 C&C 역할을 하고, 이는 인터넷에 직접 노출되지 않는다. 또한 자바스크립트 페이로드를 실행할 수 있고, 이의 기능을 확장하는 추가적인 DLL 모듈을 로드할 수 있다.
 
NodeIISWeb는 흔히 ExtDLL.dll이라고 불리는 또 다른 맞춤형 윈도우 백도어를 전개하는 데 사용되고, 백도어는 파일과 디렉토리를 조작하고, 시스템 정보를 수집하고, DLL을 실행하고, 코드 주입, 토큰 조작 등 다양한 공격 기법을 이행하는 데 쓰일 수 있다. 또한 시스템 상의 다양한 보안 기능에 연결되어 이를 조작하며 활동을 숨긴다. 예를 들어 AV 스캐닝 기능, 이벤트 로그 보고 기능, .NET 코드 신뢰성 검사, 파워셸(PowerShell) 연관 레지스트리 키 등이다.
 
NodeIISWeb와 ExtDLL.dll에 의해 로드되는 추가적 DLL 모듈 가운데 하나는 PSRunner.dll이라 불리고, 이는 파워셸 프로세스를 발생시키지 않으면서 호스트 상에서 파워셸 스크립트 실행을 허용한다. 또한 Forward.dll이라는 모듈은 HTTP 트래픽 포워딩 기능을 이행한다. 

PotatoEx.dll은 권한 상승 도구이자 액티브 디렉토리 매핑 툴이다. E.dll은 커스텀 HTTP 반응을 생성해 공격자가 익스플로잇이 표적 IIS 서버에서 성공적으로 실행되었음을 확인할 수 있게 해준다. 

프레잉 맨티스는 해킹된 IIS 서버로 접근해 애플리케이션의 로그인 페이지를 수정해 사용자 인증정보를 포획해 별개의 파일에 저장했다. 아울러 디스크에 흔적을 남기지 않으면서 메모리로 직접 로드되는 샤프하운드(SharpHound), 파워스플로잇(PowerSploit) 등 공개적으로 이용할 수 있는 공격 보안 도구(offensive security tools)을 전개했다. 

이 공격 집단은 해킹된 도메인 인증정보를 이용해 SMB 포트를 통해 내부 서버 상의 공유 폴더에 접근하기도 했다. 


프레잉 맨티스를 탐지, 예방하는 방법

프레잉 맨티스의 활동을 탐지하기는 쉽지 않다. 메모리 상주 악성코드의 휘발성과 이들의 보안에 대한 경계 때문이다. 시그니아 연구진은 .NET 역직렬화 취약점을 패치하고, 이 보고서에 나온 감염 징후들을 포착하고, 이 공격 집단의 도구를 탐지하도록 설계된 YARA 규칙으로 IIS 서버를 스캔하고, IIS 환경에서 수상한 활동을 적극적으로 추적하라고 권고했다.
 
ASP.NET VIEWSTATE 또는 이의 맞춤형 구현물의 이용을 검증하는 일은 (체크박스 서베이 내 압축된 VSTATE 등) VIEWSTATE 역직렬화 결함으로부터 ASP.NET 애플리케이션을 보호하는 데 결정적이다. 

IIS 구성 안의 enableViewStataMac 변수는 ‘참(True)’으로 설정되어야 하고, aspnet:AllowInsecureDeserialization 변수는 ‘거짓(False)’으로 설정되어야 한다. 

레지스트리 키 AspNetEnforceViewStateMac는 ‘1’로 설정되어야 하고 암호화 및 검증 키는 주의깊게 관리되어야 한다. 서버는 IIS 서버 상에서 자동 생성 키 또는 머신 키를 사용해야 하고, 정기적으로 교대되어 탈취되거나 유출된 키에 의한 악용 가능성을 줄여야 한다.
 
시그니아 측은 “ASP.NET 세션 상태가 웹 애플리케이션에 의해 사용될 때 데이터베이스 접근이 정당한 네트워크 위치에서만 이뤄질 수 있도록 해야 한다”면서 “상이한 IIS 서버/웹 애플리케이션의 세션 상태 MSSQL 데이터베이스를 가급적 분리하거나, SQL 사용자에게 적정한 최소한의 CRUD 허가를 생성하라. .NET 웹 애플리케이션이 최소한의 권한을 가진 지정된 애플리케이션 집합 ID와 함께 실행 중임을 확인하라. 이는 TG1021에게 추가적인 장애를 생성할 것이다”라고 권고했다.
 
시그니아의 보고서 외에도 호주 정부의 사이버 보안 센터(Cyber Security Center, ACSC)가 지난 해 출간한 권고안이 있다. 여기에는 시그니아가 관찰한 프레잉 맨티스 활동과 부분적으로 중복되는 해킹 징후 및 공격 기법이 포함되어 있다. 

이 권고안은 그 당시 ACSC가 ‘정교한 국가 기반 행위자의 호주 정부 및 기업에 대한 지속적인 표적 공격’이라고 불렀던 행위에 대한 대응으로 게시되었다. ACSC는 “이는 호주 정부가 지금까지 관찰한 호주 기관에 대한 가장 심각하고 조직적인 사이버 공격이다”라고 말했다. editor@itworld.co.kr 


X