동적분석 : 악성코드를 실행한 후 수행하는 점건 관점 , 난독화나 패킹됐을 경우, 또는 분석가가 정적 분석 기법으로 한계에 이르렀을 대 수행한다.
단점 , 네트워크와 시스템을 위험에 빠뜨릴 수 있기 때문에 기초 정적 분석을 완료한 후 수행해야 한다.

  • 샌드박스(Sandbox): 간편한 접근법
    • ‘실제’ 시스템의 감염 부담 없이 안전한 환경에서 신뢰할 수 없는 프로그램을 실행하는 보안 메커니즘이다.
    • 악성코드 샌드박스 이용
      • 노먼 샌드박스(Norman SandBox) , GFI 샌드박스 , 아누비스(Anubis, http://anubis.iseclab.org/) , 죠 샌드박스(Joe Sandbox) , 스렛엑스퍼트(ThreadExpert), 비트블레이즈(BitBraze),코모도 실시간 악성코드 분석(Comodo Instant Malware Analysis) , 무료로 악성코드를 분석할 수 있다.
      • 샌드박스는 해당 웹사이트에 악성코드를 보내기만 하면 이해하기 쉬운 형태로 결과를 제공해 초기 분류를 용이하게 한다. 샌드박스가 자동화돼 있지만, 불특정 다수가 이용하는 웹사이트에 회사 정보가 담긴 악성코드를 전송하는 것을 꺼릴 수 있다.
      • win32XYZ.exe 실행 파일 GFI 샌드박스 샘플 경과
        01

        • GFI SandBox사례
        • 분석 요약 색션(Analysis Summary section)은 정적 분석 정보와 상위 수준의 동적분석 결과를 보여준다.
        • 파일 색션(File Activity section)은 악성코드가 영향을 끼친 프로세스마다 오픈. 생성, 삭제된 파일을 보여준다.
        • 생성한 뮤텍스 색션(Created Mutexes section)은 악성코드가 생성한 뮤텍스를 보여준다.
        • 레지스트리 행위 색션(Registery Activity section)은 레지스트리 변경 사항을 보여준다.
        • 네트워크 행위 색션(Network Activity section)은 악성코드가 설정한 리스닝 포트나 DNS요청 등 악성코드로 인한 네트워크 행위를 보여준다.
        • VirusTotal 결과 섹션(VirusTotal result section)은 악성코드의 VirusTotal 스캔 결과를 보여준다.
    • 샌드박스 단점
      • 샌드박스가 단순히 명령어 옵션이 없이 실행 파일을 실행할 경우
        • 악성코드가 명령어 옵션이 필요하다면 해당 옵션이 주어졌을 때만 실행되는 코드는 실행되지 않을 것이다.
        • 백도어 생성 전에 악성코드가 명령 제어 패킷(Command and Control packet)을 기다리고 있다면 샌드박스에 백도어가 생성되지 않을 것이다.
      • 분석가 또는 샌드박스가 충분한 시간이 없어 모든 이벤트를 기록하지 못할 수도 있다.
        • 악성코드가 수행하기 전에 하루 동안 잠적하게 설정돼 있으면 이벤트를 놓치게 된다.
          (대부분 샌드박스는 Sleep 기능을 후킹해 잠깐 sleep하게 설정하지만, 여러 단계의 sleep이 있는 다양한 경우는 처리하지 못할 수 있다.)
      • 악성코드는 종종 가상머신에서 동작한다는 사실을 탐지하면 실행을 멈추거나 다른 방식으로 동작할 수 있다. 모든 샌드박스는 이를 고려하지 않는다.
      • 일부 악성코드는 샌드박스 시스템에서 발견되지 않는 특정 레지스트리 키나 파일이 있는지 확인한다. 명령어나 암호 키 같은 정상 데이터가 필요할 수도 있다.
      • 악성코드가 DLL 형태라면 특정 익스포트 함수가 제대로 동작하지 않을 수도 있는데, DLL이 실행 파일처럼 용이하게 동작하지 않을 수 있기 때문이다.
      • 샌드박스 환경의 OS가 악성코드에 적합하지 않을 수도 있다. 예를 들면 악성코드가 윈도우 XP와는 충돌하지만 윈도우7에서는 제대로 동작할 수 있다.
      • 샌드박스는 악성코드 행위를 알려주지 않는다. 기본적인 기능을 리포트하지만 악성코드가 보안 계정 관리자(SAM,Security Accounts Manager)해시 덤프 유틸리티인지 암호화된 키로깅 백도어인지를 알지 못한다. 그와 같은 결론은 분석가가 직접 내려야 한다.
  • 악성코드 실행
    • DLL을 성공적으로 실행시키는 방법(rundll32.exe는 명령어이다.)
    • command (윈도우+R > cmd) 창에서 아래와 같은 형식으로 실행할 수 있다.
      02
      Export 값은 함수명이거나 DLL 내에 익스포트한 함수 테이블에서 순서를 선택해야 한다. PEview 나 PE Explorer같은 도구를 사용해 export 테이블을 볼 수 있다.
    • 악성코드 DLL은 DLLMain에서 자신의 코드를 실행시키는 경우가 (DLL 진입점이라고 부름) 비번하고, DLLMain은 DLL이 로드될 때마다 수행되기 때문에 rundll32.exe를 이용해 DLL을 동적으로 강제 로딩해야만 정보를 얻을 수 있다. 다른 방법으로는 PE 헤더를 변조하고 확장자를 바꿔 윈도우가 실행 파일로 DLL을 로드할 수 있게 강제로 DLL을 실행 파일로 바꿀 수도 있다.
      • PE 헤더를 수정하려면 IMAGE_FILE_HEADER 내에 있는 Characteristics 필드의 IMAGE_FILE_DLL(0x2000)플래그를 삭제한다.
        이렇게 변경하면 임포트 함수를 동작시킬 수 없지만 DLLMain 메소드를 실행하며, 이로 인해 악성코드가 정지하거나 원치 않는 방식으로 종료될 수도 있다.
  • 프로세스 모니터를 이용한 모니터링
    • 프로세스 모니터(Process Monitor) 또는 ProMon은 특정 레지스트리, 파일 시스템, 네트워크, 프로세스와 스레드 행위를 모니터링할 수 있는 고급 윈도우 감시 도구다.
      (FileMon과 RegMon 기능을 합쳐 향상된 tool)
    • ProcMon은 많은 데이터를 수집하지만 모두 수집하지는 않는다.
      • SetWindowsHookEx 같은 특정 GUI 호출뿐만 아니라 장치 I/O 제어를 통한 루트킷이나 대화하는 사용자 모드 컴퓨넌트의 장치 드라이버 행위는 놓칠 수 있다.
      • 네트워크 행위를 로깅하는 용도로는 사용할 수 없다.(windows 버전에 따라 일관성이 있게 동작하지 않기 때문)
      • ProcMon 이용시 RAM을 이용하여 발생하는 이벤트를 받다보면 다운 될 경우가 있으며 이를 예방하기 위해 ProcMon을 특정 시간 동안만 실행하는 것이 좋다. File > Capture Events를 선택하면 수집을 중단한다.
      • Edit > Clear Display를 선택하면 사용하기 전에 관련 없는 데이터를 제거 할 수 있다.
      • ProcMon 화면
        • ProcMon의 mm32.exe 예제
          03.
          CreateFile을 이용해 C:\Documents and Settings\All Users\Application Data\mw2mmgr.txt 파일을 생성하는 것을 확인 할 수 있다.
      • ProcMon을 이용한 필터링
        • Filter > Filter , 필터 설정할 때 좌측상단의 드롭다운 박스를 이용해 칼럼을 우선 설정하고 Reset 버튼을 누른다.
        • Filter를 할 때 중요한 칼럼은 Process Name , Operation , Detail 칼럼이다.
        • ls , Contains , Less Than
        • ProcMon 필터 설정 화면
          04
          Process Name 과 Operation을 필터링한다. Operation이 RegSetValue로 설정될 때 활성화되게 Process Name이 mm32.exe인 필터링 추가
        • ProcMon 필터 버튼
          05

          • Registry 레지스트리 동작을 검사해 레지스트리 내에 악성코드 흔적이 어떻게 남는지 보여준다.
          • File system 파일 시스템을 탐색해 악성코드가 생성한 파일이나 설정에 사용한 파일을 모두 보여준다.
          • Process activity 프로세스 행위를 검사해 또 다른 프로세스를 생성했는지 알려준다.
          • Network 네트워크 연결을 통해 악성코드가 리스닝하는 포트를 보여준다.
        • 참고 > 악성코드가 부팅 시 실행된다면 시작 이벤트를 캡쳐할 수 있는 시작 드라이버로 ProcMon을 설치하는 ProcMon의 부트 로깅 옵션을 사용하자
  • 프로세스 익스플로러로 프로세스 보기(Process Explorer)
    • MS에서 무료로 배포하는 프로세스 익스플로러(Process Explorer)는 동적 분석을 수행할 때 반드시 실행해야 할 매우 강력한 작업 관리자이다.
    • 활성화된 프로세스, 프로세스가 로딩한 DLL , 다양한 프로세스 특성과 전반적인 시스템 정보를 볼 수 있다. 또한 프로세스를 종료(kill)하거나 사용자를 로그아웃하고 합법적인 프로세스를 실행할 수도 있다.
    • 프로세스 익스플로러 화면
      • svchost.exe 악성코드를 검사하기 위한 프로세스 익스플로러 화면
        06
      • 트리구조로 화면을 출력하며, 그림에서 중괄호 부분에 services.exe가 winlogon.exe의 자식 프로세스임을 알 수 있다.
      • 다섯 개의 칼럼을 보여줌
        • Process(프로세스명)
        • PID(프로세스 식별자)
        • CPU(CPU 사용량)
        • Description(설명)
        • Company Name(회사명)
      • 서비스는 분홍색 , 프로세스는 파란색 , 새로운 프로세스는 녹색 , 종료된 프로세스는 빨간색
        • 녹생과 빨강색 강조는 일시적이며 , 프로세스가 시작되거나 종료된 후 사라진다.
      • Properties 윈도우의 Image 탭 화면
        07

        • 속성 윈도우는 프로세스면을 더블클릭하면 열린다.
        • Thread 탭 , 모든 활성화된 스레드를 보여준다.
        • TCP/IP , 프로세스가 리스닝하고 있는 활성화된 연결이나 포트를 출력한다.
        • Image , 실행파일의 디스크 경로를 보여준다.
    • Verify 옵션 사용
      • process explorer에서 유용한 기능 중 하나로 Image 탭의 Verify 버튼이다.
      • 디스크상의 이미지가 마이크로소프트에서 서명한 바이너리인지 검증할 수 있다.
        (악성코드는 자신을 은익할 목적으로 검증된 윈도우 파일을 교체한다.)
      • Verity는 메모리가 아닌 디스크상의 이미지만을 검증하므로 공격자가 프로세스 교체(Process replacement)기법을 사용할 경우 무용지물이다.
        (Process replcement 기법을 사용하게 되면 메모리상의 이미지가 디스크 상의 이미지와 다르기 때문에 흔적을 남기게 된다.)
      • 위에 그림 3-6에서 svchost.exe프로세스는 검증됐지만 실제로는 악성코드다.
    • 문자열 비교
      • strings택을 이용해 디스크 실행 파일(이미지) 내의 문자열과 메모리에서 실행 중인 동일한 실행 파일을 비교하는 것이다.
      • Process Explorer의 Strings 탭에서 디스크상의(좌측) 문자열과 활성화된 메모리상의(우측) svchost.exe 문자열을 볼 수 있다.
        08
      • 두 문자열 항목이 상당수 상이하다면 프로세스가 변경된 것이다.
        ex. FAVORITES.DAT 문자열은 우측(메모리상 svehost.exe)에 다수 보이는 반면 좌측(디스크상 svchost.exe)에서는 보이지 않는다.
    • Dependency Walker 사용
      • process explorer에서 프로세스명을 오른쪽 클릭해 Launch Depends 항목을 선택하면 실행중인 프로세스에서 depends.exe(Dependency Walker)를 띄울 수 있다.
        or
        Find > Find Handle이나 DLL을 선택해서 핸들이나 DLL을 검색할 수도 있다.
      • 악의적인 DLL을 검색해 DLL을 사용하는 프로세스를 알고자 할 때 특히 유용하다.
        (Verity는 EXE 파일을 검증하지만 실행 시 모든 DLL을 로드하지 않는다.)
    • 악의적인 문서 분석
      • 문서가 임의의 프로세스를 실행시킨다면 프로세스 익스플로러에서 볼 수 있는 것이고, 속성 윈도우의 Images 탭을 통해 디스크상의 악성코드 위치를 찾을 수 있다.
  • Regshot을 이용한 레지스트리 스냅샷 비교
    • Regshot 윈도우 화면
      09
      두 레지스트리 스냅샷을 찍고 비교하는 오픈소스 레지스트리 비교 도구
  • 가짜 네트워크 구성
    • 악성코드는 일바적으로 외부와 접속을 시도하며 최종적으로 명령 통제 서버와 통신한다. 가짜 네트워크를 생성해 인터넷에 실제 접속하지 않고 네트워크 행위를 신속히 알 수 있다. 이 행위 표시자(indicator)는 DNS 이름, IP 주소, 패킷 시그니처를 포함할 수 있다.
    • ApateDNS 사용
      • 맨디언트(Mandiant , www.mandiant.com/products/research/mandiant…apatedns/download)에서 제공하는 무료 tool이며 악성코드의 DNS 요청을 가장 신속히 볼 수 있는 방법이다.
      • ApateDNS는 수신하는 모든 요청 패킷의 16진수와 ASCII 결과를 출력할 수 있다.
      • evil.malwar3.com 요청에 대한 ApateDNS 응답 모습
        10

        1. 에서 DNS 응답으로 보내진 IP 주소를 원하는 대로 설정
        2. 인터페이스 설정
          • 그 후 start server 버튼을 누르면 DNS서버가 자동으로 시작돼 로컬 호스트의 DNS 설정을 변경한다. 그 후 악성코드를 실행하고, ApateDNS 윈도우 창에 DNS 요청을 지켜본다.
          • ex. 그림3-9는 RShell이라는 악성코드가 생성하는 DNS 요청을 리다이렉션한다. DNS 정보는 evil.malwar3.com이었으며, 해당 요청은 13:22:08에 있었음을 확인 할 수 있다.
        3. 에 있는 존재하지 않는 도메인(NXDOMAIN) 옵션을 이용해서 악성코드 샘플이 사용하는 추가적인 도메인을 찾아낼 수도 있다.
          • 악성코드는 첫 번째 도메인이나 두 번째 도메인을 찾을 수 없을 경우 저장된 다른 도메인을 통해 종종 루프를 돌게끔 설계된다. NXDOMAIN 옵션을 이용해 악성코드에 설정된 추가 도메인에 접속하게 악성코드를 유도할 수 있다.
    • 넷켓을 이용한 모니터링
      • ‘TCP/IP 스위스 군용 칼(Swiss Army Knife’로 알려진 넷켓(Netcat)은 포트 스캐닝, 터널링, 프락시, 포트 포워딩 등의 용도로 양방향(inbound & outbound) 연결 모두에 사용할 수 있다.
      • 넷켓은 네트워크상에서 전송된 데이터를 표준 입력으로 받을 수 있다. 수신한 모든 데이터는 표준 출력으로 화면에 출력한다.
    • 와이어샤크를 이용한 패킷 스니핑
      • 시각화, 패킷 흐름 분석, 개별 패킷에 대한 심도있는 분석이 가능하다.
      • 와이어샤크 DNS와 HTTP 예제
        11

        1. 필터 박스 , 보여줄 패킷 필터에 사용
        2. 패킷 목록 , 출력 필터에 만족하는 모든 패킷을 보여줌
        3. 패킷 세부 내역 윈도우 , 현재 선택한 패킷의 내용을 출력한다.
        4. 16진수 윈도우 , 현재 패킷 내용을 16진수로 보여준다. 16진수 윈도우는 패킷 세부 내역 윈도우와 연결돼 선택한 필드를 강조해 보여준다.
      • Wireshark의 Follw TCP Stream 윈도우 화면
        12
      • 패킷 캡처 , Capture > Interfaces에서 수집하고자 하는 인터페이스를 선택한다. 무작위 모드(promisecuous mode)와 캡처 필터 설정 옵션을 포함한다.
    • INetSim 사용
      • 인터넷 서비스를 제공하는 리눅스 기반의 소프트웨어 모음
      • 가싸 서비스를 제공하기에 최고의 도구로, HTTP , HTTPS, FTP, IRC, DNS , SMTP 등과 같은 서비스를 에뮬레이션해 알려지지 않은 악성코드 샘플의 네트워크 행위를 분석할 수 있다.
        • iNetSim 기본 애뮬레이션 서비스* dns 53/udp/tcp – started (PID 9992)
          * http 80/tcp – started (PID 9993)
          * https 443/tcp – started (PID 9994)
          * smtp 25/tcp – started (PID 9995)

          * irc 6667/tcp – started (PID 10002)
          * smtps 465/tcp – started (PID 9996)
          * ntp 123/udp – started (PID 10003)
          * pop3 110/tcp – started (PID 9997)
          * finger 79/tcp – started (PID 10004)
          * syslog 514/udp – started (PID 10006)
          * tftp 69/udp – started (PID 10001)
          * pop3s 995/tcp – started (PID 9998)
          * time 37/tcp – started (PID 10007)
          * ftp 21/tcp – started (PID 9999)
          * ident 113/tcp – started (PID 10005)
          * time 37/udp – started (PID 10008)
          * ftps 990/tcp – started (PID 10000)
          * daytime 13/tcp – started (PID 10009)
          * daytime 13/udp – started (PID 10010)
          * echo 7/tcp – started (PID 10011)
          * echo 7/udp – started (PID 10012)
          * discard 9/udp – started (PID 10014)
          * discard 9/tcp – started (PID 10013)
          * quotd 17/tcp – started (PID 10015)
          * quotd 17/udp – started (PID 10016)
          * chargen 19/tcp – started (PID 10017)
          * dummy 1/udp – started (PID 10020)
          * chargen 19/udp – started (PID 10018)
          * dummy 1/tcp – started (PID 10019

      • INetSIm 기본 app 서비스
        • 기본적으로 스캐닝이 돌아오면 마이크로소프트 IIS 배너로 응답한다.
        • 기능중에 내장되어 있는 HTTP , HTTPS가 최고다.
        • 다양한 설정 중 , 요청 이후 반환되는 페이지나 아이템을 설정할 수 있으므로, 악성코드가 실행 전에 특정 웹 페이지를 찾는다면 그 페이지를 제공할 수 있다. 다양한 서비스를 리스닝하고 있는 포트 번호도 수정할 수 있어, 특히 악성코드가 비표준 포트를 이용할 때 유용하다.
        • 포트에 관게없이 클라이언트에서 오는 모든 데이터를 로깅할 수 있는 기능인 더미 서비스(Dummy Service)기능을 제공
          • 바운드되지 않는 포트로 보낸 모든 트래픽을 캡처하는 데 매우 유용한 기능
    • 실습 환경에서의 기본 동적 도구
      • 가상 네트워크의 예
        13