전공영역 공부 기록

Njrat 악성코드 0.7버전 분석 1편

악분 2020. 8. 17. 03:14
반응형

▶ njrat 0.7버전 링크: https://github.com/AliBawazeEer/RAT-NjRat-0.7d-modded-source-code

▶ 영상: https://youtu.be/LQdIU7o5zeU

 

 


1. 개요

1.1 NJRAT역사

공격자가 피해자 PC를 원격에서 제어하는 원격 제어 트로이목마입니다. 2013년 처음 탐지되었고 2020년 지금까지 꾸준히 업데이트되고 있습니다. .NET Visual Basic으로 만들어졌고 0.7버전이 공개적으로 유출되었습니다. 최신 버전 1.x는 유출된 0.7버전에 비해 데이터를 훔치는 인포스틸러 기능과 악성코드를 다운로드 받고 실행하는 기능이 추가되었습니다.

유출된 0.7버전과 1.x버전의 차이

 

유출된 njrat 0.7버전

 

1.2 악성행위 요약

njrat는 서버와 클라이언트 분류됩니다. 서버는 클라이언트를 생성하는 빌더와 연결제어로 구성됩니다. 빌더는 체크박스로 악성행위를 선택하여 클라이언트를 생성합니다.

빌더화면

체크박스로 선택하는 악성행위는 다음과 같습니다.

▶ BSOD(프로세스 보호)

▶ 시작 프로그램를 이용한 지속 메커니즘

▶ 레지스트리를 이용한 지속 메커니즘

▶ 안티VM&리버싱

▶ 악성코드 은닉

▶ USB에 악성코드 복사와 실행설정

▶ 난독화

▶ 키로그 버퍼 크기 설정

▶ 감염PC 이름 설정

 

 

피해자가 클라이언트를 실행하면 서버의 제어패널과 세션이 맺어집니다. 제어패널은 클라이언트를 조정합니다.

제어패널 화면

 

감염된 PC목록 중 하나를 선택하고 오른쪽 마우스 버튼을 클릭하면 피해자를 원격제어할 수 있는 메뉴가 표시됩니다.

원격제어 메뉴

 

 

공격자는 제어패널에서 다음과 같은 기능을 수행할 수 있습니다.

▶ 키보드 입력 탈취

▶ 원격 파일 실행

▶ 프로세스 목록 탐색

▶ 레지스트리 목록 탐색

▶ 파일 탐색

▶ 원격 쉘 실행

▶ 현재 화면 캡처

▶ 클라이언트 버전 업데이트/제거/세션 종료

 

 

공격자와 피해자가 주고받는 데이터는 TCP프로토콜로 전송됩니다. 전송 데이터는 [데이터길이+명령 키워드+명령어 수행결과]포맷으로 구성됩니다. 공격자는 명령어 수행 내용이 생략되어 있습니다.

송수신 데이터 포맷


2. 빌더 상세분석

2.1 실행환경 검사: 안티 VM&샌드박스&디버깅

타이머 함수를 사용하여 실행환경을 검사합니다. 샌드박스 또는 가상환경에서 실행되거나 분석도구 실행을 감지하면 악성행위를 중단합니다. njrat가 검사목록은 다음과 같습니다.

procexp, SbieCtrl, SpyTheSpy, wireshark, apateDNS, IPBlocker, TiGeR-Firewall, smsniff, exeinfoPE, NetSnifferCs, Sandboxie Control, processhacker, dnSpy, CodeReflect, Reflector, ILSpy, VGAuthService, VBoxService

구현방법은 타이머 함수를 사용했습니다.

실행환경 검사함수 생성방법

 

빌더에서 Anti's체크박스를 선택하면 실행환경 검사기능이 활성화됩니다.

실행환경 검사 활성화

 

2.2 USB감염

njrat를 USB를 포함한 각 논리 드라이버 최상단에 복사(이름:tools.exe)합니다. USB에 복사할 때 njrat가 자동 실행되도록 설정합니다.

USB감염 과정

 

USB감염 기능 활성화

 

2.3 실행흔적 생성

레지스터 HKEY_CURRENT_USER경로에 키를 생성합니다.

실행흔적을 남기는 레지스터

 

2.4 악성코드 중복 실행 검사:뮤텍스

njrat가 2개 이상 실행되지 않기 위해 뮤텍스가 존재하는지 검사합니다.

중복실행 검사

 

2.5 설치

INS함수는 njart 설치기능을 수행합니다. 은닉, 방화벽 예외, 지속 메커니즘을 설정합니다. 각 기능은 빌더의 체크박스로 활성화됩니다.

 

2.5.1 악성코드 은닉

악성코드를 찾기 어렵게 하기 위해 빌더에서 설정한 경로로 njrat를 복사하고 실행합니다. 보통 은닉기능은 처음 실행했던 악성코드를 삭제하지만 njrat 0.7버전은 삭제기능이 빠져있습니다.

악성코드 은닉

 

2.5.2 UAC 우회

환경변수를 설정하여 UAC를 우회합니다. SEE_MASK_NOZONECHECKS환경변수를 1로 설정하면 다운로드 받은 파일을 실행할 때 UAC가 우회됩니다.

환경변수 설정

 

행위분석에서 환경변수 설정을 관찰하려면 레지스트리 활동을 찾으면 됩니다.

행위분석: 환경변수 설정 관찰

 

2.5.3 지속 메커니즘: 레지스트리

njrat를 HKCU(HKLM)\Software\Microsoft\Windows\CurrentVersion\Run에 등록하여 지속 메커니즘을 설정합니다. 빌더에서 Registry StartUp체크박스를 선택하면 실행됩니다.

레지스트리 지속메커니즘 활성화

 

HKLM경로의 지속 메커니즘 설정은 실패합니다.

실패한 지속 메커니즘

 

2.5.4 지속 메커니즘: 시작 프로그램

시작 프로그램을 관리하는 StartUp폴더에 njrat를 복사합니다. 빌더에서 Copy To StartUp체크박스를 선택하면 실행됩니다.

시작 프로그램 지속 메커니즘 활성화

 

2.6 BSOD: 보호기술

njrat를 종료되면 강제로 블루스크린을 발생(관리자 권한 필요)시킵니다. 재부팅되면 지속 메커니즘때문에 njrat가 자동으로 실행됩니다.

BSDO 동작원리

 

블루스크린이 발생하면 오류 코드를 표기하는데 프로세스 종료코드가 보입니다.

블루스크린 오류코드

 

2.7 세션 생성

클라이언트는 빌더의 선택옵션을 모두 수행한 후 서버와 세션을 맺습니다. 세션은 OK.RC함수가 쓰레드로 실행되어 수행합니다. 세션을 계속 유지하기 위해 쓰레드는 무한반복문으로 구현되어 있어 영원히 실행됩니다.

세션 생성과 관리 쓰레드

 

세션을 생성하는 중에 키로깅을 위한 레지스트리를 생성합니다.

키로깅을 저장하는 레지스트리 생성

 

2.7.1 첫 번째 메세지: 감염PC정보 수집

세션이 성공적으로 맺어지면 감염PC정보를 수집하고 공격자에게 전송(명령 키워드: ll)합니다. 수집 정보는 드라이브 이름, 컴퓨터 이름, 계정이름, 감염날짜, 운영체제 버전, 캠존재 여부, 설치된백신목록입니다.

njrat송수신 패킷은 전송데이터길이+명령 키워드+데이터 포맷으로 되어있습니다. 그리고 수집정보를 구분하기 위해 구분자(Y262SUCZ4UJJ)를 사용합니다. 일부 정보는 base64인코딩되어 있습니다.

첫 번째 메세지

 

설치된 백신 목록은 WMIC를 사용하여 수집합니다.

설치된 백신을 확인하는 WMIC

 

서버는 첫 번째 메세지를 받으면 연결제어 목록에 감염PC를 추가합니다.

감염PC 추가

 

2.7.2 두 번째 메세지: 감염PC 빌더설정

첫 번째 메세지를 전송하고 곧 바로 감염된 PC설정값을 전송합니다. 설정값은 빌더에서 선택한 체크박스를 의미합니다. 두 번째 메세지의 명령 키워드는 inf이고 데이터 전부가 base64인코딩되어 있습니다.

두 번째 메세지

 

2.8 키로깅

피해자가 입력한 키를 훔치는 쓰레드를 생성합니다. 쓰레드 함수 이름은 WRK입니다. 피해자가 어떤 프로세스에서 키를 입력했는지를 레지스트리에 저장하고 공격자가 요청하면 훔친 키를 전송합니다.

키로깅 쓰레드 실행

 

GetAsyncKeyStateAPI함수를 사용해서 피해자가 마지막으로 가져온 가상키를 가져옵니다. 가상키는 사람이 해석하기 어려우므로 Fix함수를 거쳐 읽기 쉬운 문자열로 변환됩니다. AV함수는 어떤 프로세스가 마지막으로 키 입력을 했는지 찾습니다.

키로깅 동작과정

 

훔친 키와 프로세스 이름은 세션 생성 때 생성한 레지스트리에 저장됩니다.

키로깅 저장

 

가상키는 Fix함수를 거쳐 사람이 읽을 수 있는 값으로 변경됩니다. 엔터, 컨트롤 등 특수키 등을 알맞게 변환합니다.

가상키 변환

 

반응형