ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • OlympicDestroyer - Volatility Contest 2018 풀이 (1), (2), (3)
    Digital Forensics/inflearn 2024. 1. 21. 16:31

    개념 정리

     

    명령어 정리

     

    imageinfo - 메모리덤프가 어떤 이미지의 것인지 추측해줌

     

    pslist

    psscan

    pstree

    psxview

     

    cmd관련

    cmdline

    cmdscan

    consoles

     

    네트워크 관련

    netscan

     

    filescan

     

    파일 등장할 경우

    dumpfiles - 파일 덤프

    procdump - 프로세스 덤프

    memdump - 메모리 덤프

     

    Virustotal - 실행파일이 나온 건 이거 사용

    strings - memdump나 procdump에 대해 strings 이용

     

    레지스트리 관련한 printKey, reg..~ 등등은 기초 범위 벗어나서 생략

     

     

     

     

    실습 과정

    단서

    첨부파일 V10 "Olympic_Session_V10"

    메일을 통해 감염

     

    바탕화면에 만든 olympic 폴더에 문제 파일 다운로드하고 압축풀기(.vmem 메모리 파일, 영문으로 된 정답 보고서 파일, 시나리오 파일 있음)

     

    Windows PowerShell 실행

    cd .\Desktop\olympic

    volatility_2.6_win64_standalone.exe -f '.\Windows 7-1a1299dc.vmem' imageinfo (imageinfo로 이 메모리덤프가 어떤 이미지의 것인지 추측해줌, 윈도우7도 여러 버전이 있으므로 확인해야함)

    volatility_2.6_win64_standalone.exe -f '.\Windows 7-1a1299dc.vmem' --profile=Win7SP1x86 pslist > pslist.log (Suggested Profile(s)에서 주로 짧은거 아무거나 씀)

    pslist부분을 위에 filescan까지 써놓은 명령어 정리 순서대로 바꿔가면서 계속 실행하기

    notepad++ 실행해서 Ctrl+O로 바탕화면 olympic폴더에 저장된 .log파일 총 9개 다 열어주고 파일 순서는 pslist-psscan-pstree-psxview-netscan-cmdline-cmdscan-consoles-filescan 순서로 두기

     

    pstree.log

    프로세스를 볼 때는 일단 pstree 먼저 보는 게 편함 → 수상해보이는 OlympicDestroy 바로 발견했으니 옆에 //수상해!! 주석 달아놓기, 앞에 실행한 powershell을 통해서 OlympicDestroy가 트리거 됐다고 표현, powershell을 만들어낸 것은 WmiPrvSE(윈도우에서 서비스 실행할 때), svchost는 정상적인 서비스 호스트 프로세스

    Pid 드래그해서 Pid랑 PPid 이어지는 걸 보면 트리 관계가 powershell이 OlympicDestroy를 낳았고 OlympicDestroy가 _xuit, teikv, ocxip를 낳은 걸 볼 수 있음 → 다 옆에 주석 수상해 달기 → 세개의 프로세스를 만들어서 이것들이 각각 악성 행위를 하는 걸로 보임

    모르면 구글에 검색 → dwm은 데스크탑 창 관리자 안수상함, OSPPSVC는 마이크로소프트 소프트웨어 프로텍션 플랫폼(엑셀을 통한 침입이기 때문에 마이크로소프트 오피스 관련이라면 이것도 수상하니까 주석 수상해 달기) → taskeng는 작업 스케줄러 서비스인데 이게 수상한 이유는 악성코드들이 컴퓨터에 들어온 다음에 본인파일을 작업 스케줄러에 등록해놓고 지속적으로 실행하려고 하는 경우가 있기 때문에 주석 수상해 달기 → vmtoolsd는 virtual machine

     

    pslist.log(시간순으로 알려줌)

    WmiPrvSE가 낳은 powershell과 Pid PPid 보면 시간차가 남 → OSPPSVC보면 powershell 바로 전 실행됐는데 만약 이게 문서 악성코드면 이걸 이용해서 문서 악성코드가 파워쉘 실행한 것일 수도 있음, conhost도 파워쉘과 굉장히 똑같은 시간에 실행이 되는데 9시간 뒤에 OlympicDestroy가 실행이 되고 얘가 실행되면서 .exe 파일 세 개가 1초 정도 간격으로 실행됨 → 그다음이 taskeng, cmd, conhost 실행됨 → 시간 텀이 있는 게 좀 신기한 부분임

     

    psscan.log(숨김프로세스가 있는 걸 봐야하는데 출력 안 되어 있어서 끄기)

     

    psxview.log(psscan이 출력이 되어야 다른 숨김이 있는지 볼 수가 있는데 의미가 없으니까 끄기)

     

    netscan.log

    의심스러웠던 프로세스들의 외부 IP 보기(Foreign Address) → powershell보는데 외부IP가 안나와있음(있긴 해도 안나와있어서 얻을 수 있는 게 많이 없음) → Local Address는 본인 IP를 나타내는 거여서 IP는 System라인에 있는 192.168.111.130 가 이 컴퓨터의 IP로 추정됨(로컬 ip) → 네트워크를 공부하면 알게 되지만 192.168.111.128 이거랑 모양이 같은데 이는 한 네트워크 망에 걸려있다는 걸 알 수 있음(숫자가 뒤에가 비슷해서) → 192.168.111.128(원격 ip) 이 부분이 같은 네트워크에 있는 다른 컴퓨터에서 공격이 들어왔다는 건지 또는 이 해커가 들어와서 이 컴퓨터를 통해서 다른 컴퓨터로 침투를 했다는 것인지 명확하지 않음 → 네트워크에서 많은 정보를 얻을 수 없음

     

    cmdline.log

    의심스럽다했던 프로세스들 위주로 보기 → OSPPSCV 실행하는 거 보임 일단 보류 → OlympicDestroyer3 경로가 보임, 일단 증거로 메모(C:\Windows\System32\OlympicDestroyer3.exe) 나중에 이 주소에서 다운받아서 보면 됨 → 아까 수상하다고 한 _xut도 경로가 나와있으니까 일단 증거 메모(C:\Users\VM\AppData\Local\Temp\_xut.exe) → 그 이외 특이한 건 없음

     

    cmdscan.log

    자세하게 안 나와 있어서 consoles를 좀 더 보기

     

    consoles.log

    conhost라는 프로세스가 cmdline(커맨드라인)으로 파워쉘을 실행한 걸 볼 수 있음 → 다시 잠깐 pslist.log 들어가서 보면 conhost가 powershell보다 늦게 나와있긴 한데 시간이 둘이 동일함, 그래서 conhost가 powershell을 실행한 걸 알 수 있고 그러면 conhost를 누가 실행했는지 PPID 더블클릭하면 동일한 값의 PID를 가지는게 보임, csrss가 얘를 실행함 → 구글링해보면 Client Server Runtime Server Subsystem 이라는 걸 알 수 있음, 윈도우에서 기본적으로 동작 → 이상해보이진 않고 잘 모르겠지만 pstree.log에 있는 620 conhost(cmdscan.log에 보이는 620의 conhost)가 WmiPrvSE.exe랑 powershell.exe를 트리거하진 않았는지 의심해보게 됨 → conhost는 console host인데 cmd로 파워쉘을 실행하면 cmdscan.log처럼 생기기도 함, 그래서 주석 수상해 달기

     

     

    OlympicDestroyer3.exe

     

    _xut.exe

     

    filescan.log

    찾기 기능으로 OlympicDestroyer3 현재 문서에서 모두 찾기 → 이거를 추출해야하는데 그전에 아까 작업하던 파워쉘에서 mkdir dumps → mkdir files → volatility_2.6_win64_standalone.exe -f '.\Windows 7-1a1299dc.vmem' --profile=Win7SP1x86 dumpfiles -Q 0x000000007fc8b888 -n -D .\files\ 이 명령어에서 Q옵션 뒤에는 찾은 OlympicDestroyer3의 오프셋값을 주고 n옵션으로는 파일 이름이 덤프된 파일에 살아있음, D옵션으로는 --dump-dir 줄 수 있음, 추출하기 → 이번엔 찾기 기능으로 _xut 현재 문서에서 모두 찾기 → 좀전의 명령어에 찾은 부분의 오프셋값 복붙 교체 → volatility_2.6_win64_standalone.exe -f '.\Windows 7-1a1299dc.vmem' --profile=Win7SP1x86 dumpfiles -Q 0x000000007f891570 -n -D .\files\ → 추출완료 → 바탕화면의 olympic 아래 files에 .dat랑 .img가 다른 부분은 이 도구에서 Q이후 주어지는 오프셋에 대해서 단순히 빼오는 게 아니라 .img는 이미지 섹션 오브젝트에서 데이터를 빼오는 거고 .dat는 데이터 섹션 오브젝트에서 데이터를 빼오는 거임, 우리가 보고 있는 건 컴퓨터에 남아있는 메모리인데 메모리에 같은 파일이라고 해도 여러 군데 따로따로 나눠서 저장을 해옴, 서로 추출 방식이 조금씩 다르고 내용적으로 큰 차이는 없음 → virustotal에 다 던져보기(.dat두개랑 .img 두개 다 던져보기 총 4개) → 다 완전 악성임(_xut과 OlympicDestroyer3)

     

     

     

    OlympicDestroy랑 _xut는 악성프로세스인 것 확인 완료 → teikv랑 ocxip도 악성인지 살펴봐야함, OSPPSVC랑 taskeng랑 conhost는 정상 프로세스일 확률이 높음 → 그래도 혹시 모르니까 추출해보기, WmiPrvSE랑 powershell은 너무 명백해서 추출 따로 안 함

     

    pstree.log

    teikv랑 ocxip의 각각 Pid인 1648이랑 3340 이용해서 procdump해보기 → volatility_2.6_win64_standalone.exe -f '.\Windows 7-1a1299dc.vmem' --profile=Win7SP1x86 procdump -p 1648 -D .\files\ → 페이징때문에 에러뜨고 추출안됨 → volatility_2.6_win64_standalone.exe -f '.\Windows 7-1a1299dc.vmem' --profile=Win7SP1x86 procdump -p 3340 -D .\files\ → 이것도 페이징 에러뜨고 추출안됨 → 같은 방법으로 OSPPSVC의 1700랑 taskeng의 2192랑 conhost의 620도 다 procdump로 추출해보기 → 이런식으로 먼저 어떤 프로세스가 악성이고 수상한지 쭉 리스트업을 하고 추가 분석 방향을 정해야 좋음 → 마지막 세개는 추출완료 → teikv랑 ocxip도 뽑아보고 싶은데 procdump로 뽑을 수는 없음

     

     

    teikv.exe

     

    ocxip.exe

     

    filescan.log

    찾기 기능으로 teikv 쳐보면 하나 나옴 → volatility_2.6_win64_standalone.exe -f '.\Windows 7-1a1299dc.vmem' --profile=Win7SP1x86 dumpfiles -Q 0x000000007f7640d0 -n -D .\files\ → 이번엔 ocxip 찾아서 오프셋값 복붙 교체 → volatility_2.6_win64_standalone.exe -f '.\Windows 7-1a1299dc.vmem' --profile=Win7SP1x86 dumpfiles -Q 0x000000007fdcb548 -n -D .\files\ → 추출한 것들 다 virustotal에 던져보기, virustotal에서 오래 걸리는 것들은 처음 받아보는 샘플이라 오래 걸리는 거고 빨리 되는 것들은 이미 누군가가 업로드를 했어서 해시 기반으로 비교를 한거라 빠름 → teikv는 악성, ocxip도 이정도면 악성, conhost는 아닌듯, 아까 PID 1700인 OSPPSVC는 안전하고 2192였던 taskeng는 거의 아닌듯함 → 하지만 OSPPSVC랑 conhost랑 taskeng 이런것들은 시스템에 기본적으로 있는 프로세스들인데 얘네가 악성이 아니라고 해서 완전 의심스럽지 않은 게 아니라 악성 프로세스들이 이런 정상적인 프로세스들을 이용해서 동작을 함(예를 들어 whoami가 악성 명령어일 때, 우리가 cmd로 whoami를 입력했다고 해서 이 cmd 프로그램 자체가 악성 프로그램이 되는 게 아님, 이 프로세스의 메모리 덤프 안에는 명령어와 결과값들이 남기 때문에 어떤 명령어들을 입력했는지를 알고 수상한 프로세스들이 뭔지 보기 위해 메모리 덤프가 필요함)

     

    일단 지금까지 4개의 악성 프로세스를 발견!

    어디에서 들어와서

    어떤 행위를 하고(4개 프로세스 심화분석하면 알 수 있음)

    어떻게 나가는지(추가 공격)

     

    "어디에서 들어와서"

    아까 있던 단서 중 메일의 Olympic_Session_V10 엑셀파일(.xls)을 통해 감염, 오피스 관련이니까 OSPPSVC를 먼저 메모리덤프하기 → volatility_2.6_win64_standalone.exe -f '.\Windows 7-1a1299dc.vmem' --profile=Win7SP1x86 memdump -p 1700 -D .\dumps\ → 메모리덤프완료 → strings .\dumps\1700.dmp > OSPPSVC.exe.log → 3분 정도 시간 걸림

     

    "어떻게 나가는지(추가 공격)"

    시간 남으니까 파워쉘 상단에 새 탭 열어서 얘네가 각각 어떻게 나가는지, 추가 공격을 하는지 등등 알아보기 → 4개 악성에 각각 strings를 해보기 → cd .\Desktop\olympic\ -> ls .\files\ → 나오는 거 복붙해서 strings 해보기 → strings .\files\file.None.0x85404c20.OlympicDestroyer3.exe.img > OlympicDestroyer.log → strings .\files\file.None.0x857f1008._xut.exe.img > xut.exe.log → strings .\files\file.None.0x85aa41a0.teikv.exe.img > teikv.exe.log → strings .\files\file.None.0x87818d78.ocxip.exe.dat > ocxip.exe.log

     

    strings를 한 OlympicDestroyer.log랑 ocxip.exe.log랑 teikv.exe.log랑 xut.exe.log를 notepad++에 가져오기 → 아까 가져왔던 Olympic_Session_V10 이 키워드는 "어디에서 들어와서" 초반부에 적용되는 거고, 악성프로세스들이 뭘 하는지 보기 위해서는 검색 키워드가 있으면 좋은데 얘네가 뭘할지 우리가 알지는 못함, 검색 키워드가 없어서 일단 memdump보다는 procdump로 strings를 함, 그 이유는 memdump로 해도 되긴 하지만 memdump는 strings를 하게 되면 너무 파일이 커짐, 검색어 없이는 절대 볼 수가 없음, 이 4개의 악성 프로세스는 그나마 작기 때문에 procdump로 strings 한거임(strings를 해서 수동으로 볼려고 하는 것임)

     

    OlympicDestroyer.log

    이건 엄청 크진 않음 약 8만줄정도, xut는 한 8백줄, teikv는 1만줄, OSPPSVC는 5백만줄 정도임 → 직접 쭉 내리면서 수동으로 최대한 정보를 끌어내야함 → 아무것도 모르겠으면 일단 쭉 내려보다가 긴 문자열 보이면 수상하다고 여기고 읽어보기 →  첫 번째 나오는 긴 문자열은 딱 봐도 공격 코드처럼 생김 → 2784번째 줄에 cmd 뒤에 명령어 실행하고 있는데 Wscript보면 윈도우스크립트인거 알 수 있고 delete하고 getobject하고 바이너리 뭐하고 환경 뭐하고 쓰는데 vbs 스크립트도 만들고 cscript도 쓰고 또 뭐하고 있음 → 이에 대한 자세한 분석은 생략하지만, 이 4개의 프로세스 중 olympicdestroyer에 공격 스크립트가 있었다는 것을 알 수 있음, 더 자세한 건 olympicdestroyer.exe를 제대로 분석하는 과정에서 알 수 있을듯 → 이후 그 밑에도 쭉쭉 보면 notepad 실행하고 LDAP(컴퓨터가 속해있는 내부 네트워크)는 이 컴퓨터가 어떤 네트워크 집단에 소속되어있는데 그 집단의 무언가를 관리하는 프로토콜 → 아마 LDAP를 통해서 내부 네트워크에 침입하고 이용했을 거라고 추정 가능 → select ds_cn FROM ds_computer은 아마 내부 네트워크에 대한 sql 쿼리라고 하는데, 내부 네트워크에 대한 정보를 불러오는 코드일거라고 추측(메모리덤프니까 대충 추측) → 더 내려보면 계정이랑 패스워드 이런 것도 나오는데 이런 걸 어떻게 다 알고 있었는지 궁금함, 이걸 통해서 뭔가를 또 하는듯 → 더 내려보면 이후에 나오는 xml 부분은 중요X, 그외 특이사항X

     

    ocxip.exe.log

    OSPPSVC.exe.log는 메모리덤프한거라 나중에 보고 일단 ocxip.exe.log 먼저 notepad++에 불러와서 보기(4만줄정도) → 똑같이 쭉 내리다보면 xml 하나 나오는데 중요한 거 아니라 패스

     

    teikv.exe.log

    쭉 내리다보면 다 쓰레기값들이라 중요X, 중요한 게 없다는 건 악성프로세스가 아니라는 게 아님, 지금 메모리덤프를 통해 메모리 포렌식을 하고 있는 건데 보통 쓰이는 포지션은 사건이 처음 터졌을 때 상황 파악을 하고 긴급 대처를 하기 위해서 메모리 포렌식을 하기 때문에 이 단계에서는 깊이 있는 분석을 하기보다는 대충 '이렇게 해서 이렇게 되지 않을까?' 라는 정도까지의 감을 잡는 게 중요함, 악성프로세스임에는 분명하지만 안 나오면 말고의 느낌으로 분석, 이것만으로 분석을 해야하는 대회가 아닌 이상은 메모리덤프에서는 정보를 어느 정도 얻는다는 느낌으로 하면 됨, 실제로 깊이 있는 분석을 하기 위해서는 윈도우포렌식에서 파고 들어 분석함, 그래서 메모리포렌식은 난이도가 쉬운 편

     

    xut.exe.log

    쭉 내리다보면 565번째 줄에 cmd를 실행해서 어떤 명령어들을 실행하고 있음(시스템종료 관련 API를 사용하기 위해서 SeShutdownPrivilege를 쓴듯) → vssadmin은 볼륨 섀도 복사본이라는 건데 컴퓨터를 복구하고 백업하는 거임, 얘를 delete shadows /all /quiet 명령어를 통해 컴퓨터가 복구가 안되도록 다 지워버린 게 보임 → wbadmin는 운영체제, 볼륨, 파일 등을 백업 및 복원할 수 있는 명령어인데 이 카탈로그들을 다 지우는 명령어 사용함 → bcdedit은 부팅 로더 관련 명령어인데 실패들은 다 무시해버리고 리커버리가 가능한 것들을 no로 만들어버림, 즉, 부팅할 때 복구 기능 관련을 no로 설정을 바꿔버림 → wevtutil은 이벤트로그 관련 명령어인데 cl은 clear라서 시스템 이벤트로그랑 시큐리티 이벤트로그를 전부 지워버린 게 보임 → 윈도우포렌식 강의 부분 참고하면 이벤트로그를 지운다는 게 어떤 의미인지 나와있음

     

    마지막으로 OSPPSVC.log

    5백만줄이라 내려서 보면 한계 있음(마이크로소프트 오피스 관련 관리 프로그램) → 찾기 기능으로 Olympic_Session_V10 현재 문서에서 모두 찾기 → 145개의 결과 → 하나씩 살펴보기 → 이 오피스 관련해서 이 엑셀 문서가 이렇게 많이 나오는 게 수상하긴 하지만 이것만으로 얘가 여기서 동작했다고 말하기는 어려움, '약한 정황적 증거' → 엑셀 파일이 데스크탑에 있었던 건 확실해보임(경로), 그걸 넘어서는 증거들은 안 나오는듯, 파일을 덤프해서 가져올 수도 있긴 함, zip파일 계속 나오긴 하는데 확실한 증거는 안 나옴 → 다 찾아봐도 딱히 없음

     

    filescan.log

    찾기 기능으로 Olympic_Session_V10 현재 문서에서 모두 찾기 → 경로 보니까 데스크탑에 있었던 것 같음, .xls, .zip ~ partial은 분리형압축이란 뜻, 추출해보기 → volatility_2.6_win64_standalone.exe -f '.\Windows 7-1a1299dc.vmem' --profile=Win7SP1x86 dumpfiles -Q 0x000000007f7fd678 -n -D .\files\ → 파일명에 ~_수정본 이라고 한국어 써져있어서 추출이 안 되고 에러남, 의도치않게 한국어로 안티포렌식을 성공한 사례 → partial도 추출해보기 → volatility_2.6_win64_standalone.exe -f '.\Windows 7-1a1299dc.vmem' --profile=Win7SP1x86 dumpfiles -Q 0x000000007f73fec8 -n -D .\files\ → 얘도 에러남 → .lnk는 의미 없으니까 굳이X

     

     

     

    총정리

    1. 어디에서 들어와서
      Olympic_Session_V10_수정본.xls로 들어온 건 확실해보이고 얘가 실행이 되면서 OSPPSVC.exe 프로세스 관련해서 OlympicDestroyer가 나온 걸로 보이는데 이 부분은 메모리 포렌식에서 확실한 증거 발견X
    2. 4개의 악성 프로세스를 발견! (4개 프로세스 심화 분석, virustotal로 악성 여부 분석)
      OlympicDestroyer에 공격 스크립트가 있었음, LDAP, 계정, 패스워드 등이 있음
      _xut.exe에도 공격 스크립트가 있었음, 복구 관련 기능을 삭제, 부팅 관련 기능을 못하게, 이벤트로그를 삭제(이걸 하는 이유는 악성코드가 본인이 어떻게 나오는지 모르게 하기 위함)
      →  안티포렌식 측면, 악성코드의 행위는 xut를 통해 더 잘 알 수 있음
    3. 어떻게 나가는지(추가 공격)
      LDAP, 계정, 패스워드 등을 통해서 같은 네트워크에 있는 컴퓨터 공격이 나갈 것으로 의심됨(OlympicDestroyer를 통해 알 수 있던 단서, 자세한 건 olympicdestroyer를 더 분석해봐야하지만 아까 말했듯이 어떤 방향으로 분석해야할지 감을 잡는 게 중요)

     

    배경지식이 많이 필요, 강의자님이 떡밥 던지신 부분을 찾아봐도 되고 나만의 논리 구조를 만들어봐도 좋음

     

     

    추가적으로 분석 가능한 부분들(수업은 따로X)

    • memdump → strings (검색어도 많이 없고 오래 걸려서 수업에서 잘 안 다뤘는데 4개의 프로세스 및 수상하다고 했던 프로세스들도 한 번씩 다 해보는 걸 추천)
      메모리 덤프 관련 하다보면 payload들이 나옴(payload란 공격에 사용되는 공격 명령어들, 일반적으로 BASE64 형태로 되어있음, 강의자님은 분석해봤는데 powershell에서 olympicdestroy로 떨어지고 여기서 또 xut로 떨어지고 이런 부분들이 재밌다고 하심)
    • 네트워크 관련해서 LDAP가 있었는데 netscan에서 찾았던 192.168.111.128 (원격 ip) 이런게 메모리 덤프에 있는지 확인 추천

     

     

     

     

    새로 알게 된 것

    기초부터 따라하는 디지털포렌식 인프런 강의를 드디어 완강했다! 디지털포렌식이 처음이지만 강의자님께서 진짜 기초부터 하나하나 잘 가르쳐주셔서 정말 유익하고 도움이 많이 되는 강의였다. 이번 OlympicDestroyer 문제는 메모리 포렌식 영역에 있긴 하지만 분석을 하는 과정에서 윈도우 포렌식의 내용도 알고 있는 상태에서 이 강의를 들으면 더 좋기 때문에 이 강의를 윈도우 포렌식을 다 듣고 나서 듣게 되었다. 이 강의를 통해 쌓은 기초 지식을 토대로 앞으로는 더 심화된 공부를 해야겠다. 좋은 강의 감사합니다!!

     

     

     

     

     

    https://www.inflearn.com/course/%EA%B8%B0%EC%B4%88-%EB%94%94%EC%A7%80%ED%84%B8-%ED%8F%AC%EB%A0%8C%EC%8B%9D

     

    [지금 무료] 기초부터 따라하는 디지털포렌식 강의 - 인프런

    기초부터 따라하는 디지털포렌식 강의입니다. 강의를 따라하다보면 "물 흐르듯, 자연스럽게" 실력이 늘어가는 강의를 추구합니다., 초보자 눈높이에 딱 맞춘, 원리를 이해하는 디지털포렌식 입

    www.inflearn.com

     

    본 글은 위의 인프런 강의를 듣고 작성하였습니다.

     

Designed by Tistory.