0. 목차
Contents
1. 개요
1.1 악성코드개요
njRAT의 설명에 앞서 RAT가 무엇인지 간략하게 알아보자
1) njRAT
njRAT는 시리아 등 중동 해커 그룹에서 인기가 많았으며 키로깅을 포함한 정보 유출 외에도 공격자의 명령을 수행할 수 있는 RAT 악성코드이다. 2013년에 처음 탐지되었으며 꾸준히 업데이트되고 있다.
다음 기사에서는 2020년 6월 15일부터 21까지 수집한 악성코드 통계 결과를 나타내며 njRAT가 4위임을 알 수 있다.
위 기사에 따르면 "njRAT는 대부분 웹하드나 토렌트를 통해 정상 파일로 위장하여 유포한다. 유포 시 위장하는 대상으로는 게임 핵이나 기프트카드 생성기와 같은 불법 프로그램이 다수 존재하며, 이 외에도 불법 공유 게임들에 포함되어 유포되는 경우가 많다"고 한다.
2) njRAT 특징
- 닷넷(.NET) Visual Basic으로 개발
- 0.7버전이 공개적으로 유출되었으며 최신 버전 1.x는 유출된 0.7버전에서 인포스틸러 기능과 추가 악성코드 설치 기능이 추가됨
- njRAT와 대부분의 RAT 형태의 공격 툴 방식은 크게 다르지 않음
- 특정 TCP 포트로 명령 제어 서버에 연결하여 정보를 전송하며 패킷 안에 파싱할 수 있도록 정보를 구분하는 특수한 문자열을 삽입
- 난독화 기법인 Base64 인코딩 기법 사용
1.2 분석 정보
분석 환경
Index | Tags |
---|---|
OS | Windows10 64bitWindows7 32bit |
Tools | DIEVS2017dnspypestudioprocexpprocmonwireshark |
sandbox | app.any.run |
1) 분석대상
오픈소스로 공개된 njRAT 0.7버젼을 대상으로 진행하였다.
2) njRAT 압축 해제 후 확인
APP - NjRat 0.7D Moded 폴더
: njRAT 실행파일
SRC - NjRAT 0.7D 폴더
: 클라이언트 & 서버 프로그램 소스 코드
NjRAT
: 서버 프로그램 소스 코드
STUB
: 클라이언트 프로그램 소스 코드
2. 상세분석
2.1 파일 정보 확인
서버 프로그램으로 작동하는 NjRAT 0.7D.exe파일을 확인
- 패킹은 되어 있지 않으며 .NET컴파일 사용
2.2 샌드박스 분석
NjRAT 0.7D.exe프로그램을 app.any.run에 올리면 아무런 결과가 나오지 않는다. 따라서, 클라이언트로 작동하는 Client.exe파일을 분석 대상으로 정하였다.
현재 서버 프로그램이 존재하지 않아 Http Request는 존재하지 않지만 Client.exe프로세스가 실행되면서 자식 프로세스로 netsh.exe프로세스가 추가로 생성되어 실행된다.
Process Graph확인 결과 client.exe → netsh.exe 순서로 실행
오른쪽 박스를 보면 Startup폴더 아래에 실행 가능한 파일을 생성한 것을 확인할 수 있다. 또한 왼쪽 아래 박스를 보면 알려진 악성코드라 그런지 njRAT라고 감지되었으며 autorun 레지스트리 키 등록과 start menu 폴더에 파일을 생성한 것을 확인할 수 있다. 이는 지속성 전략을 위해 사용된 것을 알 수 있다.
ATT&CK Matrix 정보를 확인하면 총 2개의 유형(Persistence, Defense Evasion)을 사용된 것을 확인할 수 있다. Persistence전략에는 Registry Run Key, Startup Folder을 사용한 것을 확인할 수 있으며 Defense Evasion전략에는 Disabling Security Tools을 사용한 것을 확인할 수 있다.
Persistence전략을 확인해보면 CurrentVersion\Run키에 Client.exe파일을 등록한 것을 확인할 수 있다.
또한, \Startup\폴더 밑에 ac96940d2894e7ddbe00d69adbe0653a.exe 파일을 생성한다.
Defense Evasion전략에는 netsh프로그램을 이용하여 방화벽에 Client.exe프로그램을 허용하도록 추가하였다.
2.3 악성행위 분석
njRAT는 서버와 클라이언트로 구성되며 서버 프로그램에서 빌더를 통해 클라이언트 프로그램을 생성하여 희생자 시스템에서 클라이언트 프로그램을 실행시키면 다양한 악성 행위를 수행할 수 있다.
(참고로 현재 악성행위 분석 환경은 희생자 PC, 공격자 PC 모두 windows7환경이며 VM에 올린 상태이다.)
1) njRAT 실행
NjRat 0.7D.exe
프로그램 실행
- 하단에
Builder
클릭
2) builder [클라이언트 생성기]
builder
는 위 그림처럼 체크박스를 통해 악성행위를 선택할 수 있으며 설정이 완료되면Build
버튼을 눌러 클라이언트 프로그램을 생성- Host : C&C 서버 IP
- Port : C&C 서버 Port
- VicTim Name : 봇넷 이름
- ExeName : Copy 옵션 체크 시 해당 이름으로 파일 생성
- Directory : Copy 옵션 체크 시 해당 디렉토리에서 파일 생성
- 체크박스에 존재하는 악성행위 기능들은 분석을 통해서 확인해보자
- 클라이언트 실행 파일 명을 지정해주고 Save를 누르자
3) 감염 확인 및 기능 파악
이후에 클라이언트 프로그램이 생성되고 해당 파일을 희생자 시스템에서 실행시켜보자
- 희생자 PC에서 클라이언트를 실행시키면 위 그림과 같이 공격자 PC의 njRAT 서버 프로그램에 클라이언트와 연결된 것을 확인할 수 있다.
- 감염된 희생자 PC에서 우클릭하면 다양한 악성행위를 수행할 수 있는 기능 목록이 나온다.
- 이중에 몇 가지 악성행위 기능을 살펴보자
① [Manager]
- File Manager : 파일 및 디렉터리 확인
- Process Manager : 프로세스 정보 확인
- Connections : 감염PC에서 커넥션된 정보 확인
- Registry : 레지스트리 확인
- Remote shell : 감염 PC에서 원격으로 쉘 명령 수행
- Service : 서비스 정보 확인
② [Run File]
- 원격 파일 및 Script를 감염 PC에서 실행
③ [Remote Destop]
- 감염 PC의 원격 데스크톱 실행
④ [Keylogger]
- 감염 PC에서 입력되는 키보드 입력 탈취
⑤ [Open Chat]
- 감염 PC와 채팅을 할 수 있는 기능으로 실행하면 감염 PC에서 채팅 프로그램이 실행되며 공격자 PC에서 채팅을 끄면 감염 PC에서도 꺼진다.
⑥ [Server]
- 서버 측에서 클라이언트에게 다양한 명령을 수행할 수 있는 기능
- 클라이언트 프로그램 업데이트, Uninstall, Restart, Close, Disconnect
- Close는 서버와 클라이언트간에 Connection이 끊어지며 다시 실행하기 전까지는 Connection이 되지 않는다.
- Discoonect는 잠시 Connection이 끊어지며 다시 Connection된다.
주요 기능 요약)
- 파일, 프로세스, 커넥션, 레지스트리, 서비스 목록 탐색
- 원격 쉘 수행
- 원격 파일 실행
- 원격 데스크톱 실행
- 원격 캠 확인
- 원격 마이크 녹음
- 키로깅
- 오픈 채팅
- 클라이언트 버전 업데이트 및 제거, 종료
2.4 njRAT 패킷 분석
현재 패킷 분석 환경은 공격자 PC가 windows10이며 희생자 PC가 windows7이다.
- 연결 확인
- 희생자 IP : 192.168.189.136
- 공격자 IP : 192.168.189.1
1) 지정된 포트로 세션 맺기
- 공격자가 지정한 TCP 6666번 포트로 세션을 맺고 통신을 한다.
- 즉, 공격자와 희생자간에는 주고받는 데이터는 TCP 프로토콜로 전송된다.
- 공격자 PC와 희생자 PC가 세션이 성공적으로 맺어졌음을 확인
① 첫 세션 연결시 페이로드 확인(피해자 PC → 공격자 PC)
- 위 페이로드를 살펴보면
250.
뒤에ll
로 시작하는 데이터가 나오고Y262SUCZ4UJJ
문자열이 반복되는 것을 확인할 수 있다. 이는Y262SUCZ4UJJ
문자열이 어떠한 값에 대한 구분자 역할을 한다.
- 이후에도
[숫자] + [.] + [키워드] + [값]
이런 식으로 나오는 것을 확인할 수 있다.
- 즉, 전송 데이터의 포맷이
[데이터 길이] + [.] + [명령 키워드] + [명령 수행결과]
임을 알 수 있다. 그리고 중간중간에 base64로 인코딩된 것을 알 수 있다.
- 파이썬으로 Y262SUCZ4UJJ문자열로 slice하여 출력
첫 세션 연결 시 전송하는 목록
ll 키워드
Field | Description |
---|---|
TXlCb3RfRTBDRTMzN0Q= | "MyBot_E0CE337D"를 Base64로 인코딩한 값 |
IE11WIN7 | 감염된 PC의 컴퓨터 이름 |
IEUser | 감염된 PC의 사용자 이름 |
21-02-20 | 감염된 날짜 |
Win 7 Enterprise SP1 x86 | 감염된 PC의 시스템 정보 |
No | 캠 사용 여부 확인 |
No AV | AV 사용 여부 확인 |
f55ab6fb12b43f7934c631eabc315fb4, | HKEY_CURRENT_USER/Software/????에서 생성한 sub key값 |
- Binary 데이터로 이뤄져있으며 "4D 5A"로 시작하는 것을 통해 PE파일임을 확인
inf 키워드
Field | Description |
---|---|
TXlCb3QNCjE5Mi4xNjguMTg5LjE6NjY2Ng0KRGVza3RvcA0KQ2xpZW50LmV4ZQ0KRmFsc2UNClRydWUNClRydWUNClRydWU= | "MyBot 192.168.189.1:6666 Desktop Client.exe False True True True"를 Base64로 인코딩한 값 |
act 키워드
Field | Description |
---|---|
UHJvZ3JhbSBNYW5hZ2VyAA== | "Program Manager"를 Base64로 인코딩한 값 이 부분은 감염된 PC가 현재 활성화된 프로세스를 보여줌 |
위 항목들은 njRAT 서버 프로그램에서 감염된 PC 세션 연결 시 감염된 PC 목록을 구성하는 정보임을 확인할 수 있다. 이 밖에도 감염 PC에게 어떤 악성행위를 실행할 때도 앞서 확인했던 특정 포맷을 가지고 패킷을 보낸다. 추가로 해당 버젼에서는 구분자로 Y262SUCZ4UJJ
문자열을 사용했지만 다른 버젼에서는 다른 구분자 문자열을 사용한다.
2.5 빌더 소스코드 분석
- 메인 함수 확인
1) 실행환경 검사(안티 VM & 샌드박스 & 디버깅)
- builder에서 Anti's 체크 박스를 선택하면 실행환경 검사 기능 활성화
- 타이머 함수를 사용하여 실행환경 검사하는 코드이다.
- 타이머 설정을 5초 간격으로 하며
ElapsedEventHandler
를 통해 이벤트를 처리할 메서드를 지정해준다. →MyAntiProcess.Handler
- 즉, 5초마다
MyAntiProcess.Handler
이벤트 핸들러를 실행한다.
- MyAntiProcess클래스의 Handler메서드를 확인해보면 프로세스 이름을 가져와서 일치하는 문자열이 존재하면 종료한다.
- 악성코드 분석할 때 사용하는 툴이나 샌드박스 툴 문자열이 있는 것을 확인해볼 수 있다. 이를 통해 이러한 툴을 사용하는 경우 악성행위를 중단하는 용도로 사용되는 것을 알 수 있다.
검사목록 :
procexp, SbieCtrl, SpyTheSpy, wireshark, apateDNS, IPBlocker, TiGeR-Firewall, smsniff, exeinfoPE, NetSnifferCs, Sandboxie Control, processhacker, dnSpy, CodeReflect, Reflector, ILSpy, VGAuthService, VBoxService
실제로 ProcessExplorer프로그램을 실행시키고 Client프로그램을 실행시키면 잠깐 떳다가 사라지는 것을 확인할 수 있다.
- Client.exe 프로세스 실행
- Client.exe 프로세스 종료
2) USB 감염
- builder에서 SpreadUSB 체크 박스를 선택하면 활성화
- USB를 포함한 각 논리 드라이버 최상단에 "Tools.exe"이름의 프로그램을 복사
- 주석처리로 되어있는 부분을 보면
autorun.inf
파일에 Tools.exe가 실행이 되도록 설정한 것을 확인해 볼 수 있다.
autorun.inf
파일이란 이동식 매체가 삽입되면 자동으로 특정 동작을 수행하도록 하는 기능의 파일이다.
- 따라서, USB 연결시 자동으로 njrat가 실행되도록 하는 기능임을 확인할 수 있다.
실제로 관리자 권한으로 실행시켜보면 논리적 디스크인 C드라이브 최상단에 Tools.exe파일이 생성된 것을 확인해볼 수 있다. (관리자 권한으로 실행시키지 않는 경우에는 권한 문제로 생성되지 않음)
관리자 권한으로 실행시킨 경우 Tools.exe파일 관련 이벤트 확인 결과 성공적으로 C드라이브 밑에 Tools.exe가 생성된 것을 볼 수 있다.
또한, Tools.exe파일과 Client.exe파일의 해시값을 비교해보면 동일한 프로그램임을 알 수 있다.
3) 설치 (은닉, 방화벽 예외, 지속 메커니즘 설정)
- builder에서 위 빨간색 박스 부분을 통해 njrat설치 기능을 수행
- 여기에서는 은닉, UAC우회, 지속 메커니즘을 설정
① 악성코드 은닉
- 악성코드를 찾기 어렵게 하기 위해 빌더에서 설정한 경로로 njRAT복사하고 실행하는 로직이다.(copy체크박스 → OK.Idr)
- 첫 번째 빨간색 박스에 있는 코드부터 보면 njRAT를 복사하고 그 다음에 복사한 njRAT를 실행한다. 마지막으로 처음 실행했던 njRAT를 종료한다.
- 하지만, 이 부분에서 처음 실행했던 njRAT파일을 삭제하지 않는 로직이 빠져있다.
② UAC 우회
- 환경변수를 설정하여 UAC 우회하는 기능
- 확인 결과 환경변수 SEE_MASK_NOZONECHECKS에 1로 세팅됨
- 이를 통해 다운로드 받은 파일 실행할 때 UAC 우회가능
③ 방화벽 설정
netsh firewall
은 Windows 방화벽 동작을 제어하는 기능을 제공
netsh firewall add allowedprogram
: Enable a program
- 이를 통해 njrat프로그램을 방화벽에서 예외사항에 적용한다.
- 인바운드 규칙에서 Client.exe파일이 TCP, UDP 허용됨을 확인
- 이 부분은 njRAT의 큰 특징으로 실제로 njRAT를 탐지할 때 이 부분을 yara rule에 적용한다.
④ 지속 메커니즘: 레지스트리
HKCU\Sofrware\Microsoft\Windows\CurrentVersion\Run
에 등록
HKLM\Sofrware\Microsoft\Windows\CurrentVersion\Run
에 등록
확인 결과 HKCU밑에는 성공적으로 value값이 등록되는데 HKLM밑에는 권한이 없어서 ACCESS DENIED가 뜬다. (관리자 권한 필요)
왼쪽은 HKCU밑에 성공적으로 값이 들어간 것을 확인할 수 있으며 오른쪽은 HKLM밑에 값이 들어가지 않는 것을 확인할 수 있다.
⑤ 지속 메커니즘: 시작 프로그램
- 시작 프로그램을 관리하는 StartUp폴더에 njRAT를 복사
이벤트 확인결과 Startup밑에 njRAT복사하는 로그를 확인할 수 있음
C:\Users\IEUser\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
밑에ac96940d2894e7ddbe00d69adbe0653a.exe
파일 생성
- 생성된 파일을 client.exe파일과 해쉬 값 비교해보면 동일한 파일임을 확인
4) 세션 생성
- OK.INS()이후에 OK.RC라는 함수를 스레드로 시작한다.
- OK.RC함수는 공격자의 명령어를 전달받고 실행해야하기 때문에 goto문을 이용하여 무한 루프로 동작한다.
- 핵심적인 부분은 첫 세션 연결시 OK.connect하는 부분이다. 이제 connect부분부터는 dnspy툴을 이용하여 분석해보자
① connect()
- connect함수를 살펴보면 OK.C에 TcpClient객체를 만들어서 연결한다.
- 마지막으로 Connect되었을 때 "ll"키워드와 "inf"키워드를 사용하여 특정 문자열을 만들어 OK.send()를 통해 공격자에게 보낸다.
- 먼저 "ll"키워드가 사용되는 OK.Send(OK.inf())부터 살펴보자
① OK.Send(OK.inf()) - "ll"키워드
- 쭉 살펴보면 위에서 패킷 분석했을 때 "ll"명령 키워드 뒤에 오는 감염된 PC의 정보를 수집하는 것을 확인할 수 있다.
- 두 번째 사진을 보면 Cam여부를 확인하며 밑에 GetAntiVirus()를 호출하는 것을 확인할 수 있다.
- GetAntiVirus()는 wmic를 이용하여 "Select * From AntiVirusProduct"쿼리를 날려 AV사용 정보를 확인한다.
② OK.Send("inf" + OK.Y + OK.ENB(ref text)) - "inf"키워드
- 마지막으로 "inf"키워드 문자열에 text문자열을 붙여서 보낸다.(참고로 OK.ENB()는 base64로 인코딩하는 역할)
- 이 때, text변수에 들어가는 정보에는 builder에서 설정한 체크박스의 값이다.
5) BSOD: 보호기술
- BSOD 체크박스에 체크하면서 활성화
- H1D는 BSOD필드 위치를 나타내며 BSOD필드에 변수 i(1)의 값으로 쓴다.
- BSOD필드가 설정되면 프로세스를 강제로 종료시키는 경우 블루스크린이 발생하도록 한다.
- 참고로 이 부분은 관리자 권한이 필요로 한다.(관리자 권한이 아닌 경우에는 강제로 프로세스를 종료시켜도 블루스크린이 발생하지 않는다.)
- 실제로 관리자 권한으로 실행시킨 Client.exe프로세스를 강제로 종료시킨 결과 블루스크린이 발생한다. 그리고 다시 재부팅하게 된다.
- 즉, njRAT가 감염된 사실을 알고 강제로 종료시키면 블루스크린을 발생시키고 다시 재부팅되도록 한다. 이후에는 지속메커니즘에 의해 재부팅 이후엥도 계속 njRAT를 실행시키도록 한다. 따라서, 계속 njRAT가 실행되도록 하는 보호기술 중 하나이다.
3. 정리
njRAT 악성코드는 웹 하드나 토렌트를 통해 유포되며 수행되는 악성 기능에는 원격 쉘 수행, 원격 데스크톱, 키로깅, 레지스트리, 프로세스 정보 등 다양한 원격 기능을 수행할 수 있다.
njRAT에서는 AV회피 기능, 지속 메커니즘, 보호기술, UAC우회, 방화벽 설정, 은닉 기능 등이 사용되며 2013년에 처음 탐지 된 이후로도 계속해서 기능이 업데이트 되고 있다.
패킷 분석을 통해 살펴본 특징 중에는 서버와 연결하기 위해 특정 TCP포트를 사용하며 "페이로드 길이" + "명령 키워드" + "구분자" + "명령 수행결과"와 같은 포맷을 사용하는 것이다. 참고로 여기서 구분자는 버전마다 다를 수 있다.
처음 악성코드 분석을 마쳤는데 오픈소스 코드를 보면서 분석을 해서 수월했고 솔직히 오픈소스 코드를 보면서 수월했다곤 하지만 혼자서 분석했으면 그냥 쉽게 놓치는 부분이나 분석하는데 시간이 좀 걸렸을 텐데 악분님 블로그와 유튜브가 가장 도움이 많이 되었던 것 같다.
4. 참고 자료
Uploaded by Notion2Tistory v1.1.0