▶ 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버전에 비해 데이터를 훔치는 인포스틸러 기능과 악성코드를 다운로드 받고 실행하는 기능이 추가되었습니다.
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가 자동 실행되도록 설정합니다.
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가 자동으로 실행됩니다.
블루스크린이 발생하면 오류 코드를 표기하는데 프로세스 종료코드가 보입니다.
2.7 세션 생성
클라이언트는 빌더의 선택옵션을 모두 수행한 후 서버와 세션을 맺습니다. 세션은 OK.RC함수가 쓰레드로 실행되어 수행합니다. 세션을 계속 유지하기 위해 쓰레드는 무한반복문으로 구현되어 있어 영원히 실행됩니다.
세션을 생성하는 중에 키로깅을 위한 레지스트리를 생성합니다.
2.7.1 첫 번째 메세지: 감염PC정보 수집
세션이 성공적으로 맺어지면 감염PC정보를 수집하고 공격자에게 전송(명령 키워드: ll)합니다. 수집 정보는 드라이브 이름, 컴퓨터 이름, 계정이름, 감염날짜, 운영체제 버전, 캠존재 여부, 설치된백신목록입니다.
njrat송수신 패킷은 전송데이터길이+명령 키워드+데이터 포맷으로 되어있습니다. 그리고 수집정보를 구분하기 위해 구분자(Y262SUCZ4UJJ)를 사용합니다. 일부 정보는 base64인코딩되어 있습니다.
설치된 백신 목록은 WMIC를 사용하여 수집합니다.
서버는 첫 번째 메세지를 받으면 연결제어 목록에 감염PC를 추가합니다.
2.7.2 두 번째 메세지: 감염PC 빌더설정
첫 번째 메세지를 전송하고 곧 바로 감염된 PC설정값을 전송합니다. 설정값은 빌더에서 선택한 체크박스를 의미합니다. 두 번째 메세지의 명령 키워드는 inf이고 데이터 전부가 base64인코딩되어 있습니다.
2.8 키로깅
피해자가 입력한 키를 훔치는 쓰레드를 생성합니다. 쓰레드 함수 이름은 WRK입니다. 피해자가 어떤 프로세스에서 키를 입력했는지를 레지스트리에 저장하고 공격자가 요청하면 훔친 키를 전송합니다.
GetAsyncKeyStateAPI함수를 사용해서 피해자가 마지막으로 가져온 가상키를 가져옵니다. 가상키는 사람이 해석하기 어려우므로 Fix함수를 거쳐 읽기 쉬운 문자열로 변환됩니다. AV함수는 어떤 프로세스가 마지막으로 키 입력을 했는지 찾습니다.
훔친 키와 프로세스 이름은 세션 생성 때 생성한 레지스트리에 저장됩니다.
가상키는 Fix함수를 거쳐 사람이 읽을 수 있는 값으로 변경됩니다. 엔터, 컨트롤 등 특수키 등을 알맞게 변환합니다.
'전공영역 공부 기록' 카테고리의 다른 글
인텔리제이 롬북(lombok) 플러그인 설치 (0) | 2020.08.31 |
---|---|
kubeadm 오류 - ERROR Swap (0) | 2020.08.27 |
그램 노트북은 악성코드 분석에 충분할까? (0) | 2020.08.12 |
가짜 잠금화면을 보여주고 돈을 요구하는 악성코드 (0) | 2020.08.12 |
악성코드 샘플 다운로드 추천 사이트 (1) | 2020.08.11 |