보안정보

전문화된 보안 관련 자료, 보안 트렌드를 엿볼 수 있는
차세대 통합보안관리 기업 이글루코퍼레이션 보안정보입니다.

HIDDEN COBRA 악성코드(java.exe) 분석 보고서

2018.10.02

6,273





1. 개요

2009년부터 활동한 것으로 추정되는 해킹 그룹 HIDDEN COBRA에서 사용하는 악성코드(11종) 중 수집 가능한 악성코드(java.exe)에 대한 분석을 진행하였다. 해당 악성코드는 C&C 서버에 접속 후 공격 명령을 수신 및 실행하는 것으로 확인되었다.

1) 요약

악성코드(java.exe)는 64bit 악성 DLL파일(6AB301FC3296E1CEB140BF5D294894C5)에 의해 생성되는 것으로
알려져 있으며, 악성코드가 실행되면 고정된 4개의 C&C 서버에 대해 접속을 시도한다. C&C 서버 접속에 성공할 경우, 공격자로부터 명령을 수신하여 각 명령에 따른 여러 가지 악성행위들을 수행한다.


2) IoC 정보

IoC 정보와 확인된 악성행위는 아래 [표 1]과 같다.

C&C 서버

악성 행위 목록

80.91.118.45:443(https)

ㆍ파일 검색/읽기/쓰기/삭제

ㆍ프로세스 실행/종료

ㆍ쉘을 이용한 명령 실행

ㆍ레지스트리 조작

181.119.19.56:443(https)

111.207.78.204:443(https)

184.107.209.2:443(https)


[표 1] HIDDEN COBRA 악성코드에 의한 시스템 영향


2. 악성코드 정보

분석에 사용된 악성코드(java.exe)에 대한 정보는 다음과 같다.

구 분

내 용

SHA256

3c809a10106990ba93ec0ed3b63ec8558414c6680f6187066b1aacd4d8c58210

파일 크기

116kB (118,784-bytes)

파일 형식

Win32 EXE


[표 2] 악성코드(java.exe) 정보


3. 상세 분석

악성코드(java.exe)는 정보은닉을 위해 악성 행위에 필요한 함수들을 암호화 한 문자열 형태로 저장하고 있다.


[그림 1] 암호화 된 함수 이름


이 암호화된 문자열은 악성코드 내에는 이를 복호화하기 위한 루틴에 의해 평문 함수 이름으로 해독된다.


[그림 2] 함수 이름 복호화 #1


[그림 3]에서는 함수 이름의 복호화를 위해 sub_4019E0 이름의 서브루틴을 호출한다. 실제 sub_4019E0 서브루틴은 [그림 2]와 동일한 알고리즘을 가지고 있다.


[그림 3] 함수 이름 복호화 #2


복호화 이후엔 감염된 시스템의 CPU 및 디스크 드라이브, 네트워크 어댑터 등의 정보들을 확인한다. 


[그림 4] CPU 및 디스크 드라이브 정보



[그림 5] 네트워크 어댑터 정보


아래 [그림 6]은 하드코딩 된 C&C 서버의 IP 주소 및 포트 번호를 나타낸다. 4바이트 값 중 각 1바이트 씩 하나의 네트워크 클래스를 나타낸다.


[그림 6] C&C 서버 IP 주소 및 포트 번호


이후 각 C&C 서버에 대한 접속을 시도하는데 하나의 감염된 시스템에서 여러 C&C 서버로의 접속을 지원하기 위해 select() 함수를 사용한 것으로 판단된다.


[그림 7] C&C 서버 접속 시도


분석한 날짜를 기준으로 위의 C&C 서버들은 폐쇄된 상태였으며 [그림 8]에서 볼 수 있듯이 각 C&C 서버와의 TCP 3-way handshaking 과정에서 RST/ACK 패킷을 보내어 연결을 거부한다.


[그림 8] C&C 서버 접속 실패


다음은 C&C서버의 폐쇄로 인해 악성코드 동적 확인이 불가함에 따라 정적 분석만으로 확인한 내용이다.


1) 추가 악성 행위 목록


만일 C&C 서버로의 접속이 성공한다면, 아래 [그림 9], [그림 10], 그리고 [그림 11]에서 볼 수 있듯이 다양한 악성 행위를 지원하는 여러 서브루틴이 존재한다.


[그림 9] 악성 행위 목록 #1



[그림 10] 악성 행위 목록 #2



[그림 11] 악성 행위 목록 #3


2) 레지스트리 조작을 통한 키 생성 및 서비스 제거


악성코드는 하드코딩 된 데이터를 가지고 레지스트리 키에 접근한 후 새로운 값을 생성한다.


[그림 12] 새로운 레지스트리 생성


또한, 특정 서비스를 검색하여 존재할 경우 해당 서비스를 제거한다.


[그림 13] 특정 서비스 제거


3) 파일관련 조작기능 존재


아래 [그림 14]는 특정 파일(디렉터리 포함)을 찾아 현재 디렉터리로 설정한다.


[그림 14] 현재 디렉터리 설정


아래 [그림 15]는 조건식을 만족하는 특정 파일을 검색한다.


[그림 15] 특정 파일 검색


아래 [그림 16]은 특정 파일에 대해 쓰기 작업을 수행한다.


[그림 16] 특정 파일 쓰기


아래 [그림 17]과 [그림 18]은 특정 파일에 대해 읽기 작업을 수행한다.


[그림 17] 특정 파일 읽기 #1



[그림 18] 특정 파일 읽기 #2


아래 [그림 19]는 특정 파일을 삭제한다.


[그림 19] 특정 파일 삭제



4) 프로세스 생성 및 종료

아래 [그림 20]은 특정 프로세스를 강제 종료한다.


[그림 20] 특정 프로세스 강제 종료


아래 [그림 21]은 특정 프로세스를 생성한다.


[그림 21] 특정 프로세스 생성


아래 [그림 22]는 로그인 된 계정의 권한으로 특정 프로세스를 생성한다.


[그림 22] 로그인 된 계정 권한의 프로세스 생성


5) 쉘 명령 실행

아래 [그림 23]은 cmd.exe /c 쉘 명령을 실행하는 프로세스를 생성한다.


[그림 23] 쉘 명령 실행


4. 참고자료