0. 개요

1. mmc

2. 작업 스케줄러

3. taskhost.exe

4. etc





0. 개요

[ http://sanseolab.tistory.com/18 ]

  서비스의 경우 위의 링크에서 정리하였지만 그래도 윈도우의 시스템과 관련해서는 아직도 제대로 개념이 잡히지 않은 부분이 많다. 예를들어서 taskhost.exe나 taskeng.exe는 무엇이고, schtasks.exe는 어떻게 동작하는지 등등이다. 또한 svchost.exe는 서비스 외에도 작업 스케줄링과 관련해서도 사용된다는 것을 알게 됨으로써 헷갈리는 것만 늘어나서 확실한 정리가 필요했다. 물론 지금도 완벽하게는 파악하지 못했지만 그래도 나름의 분류를 하게 되었고 더 자세한 내용은 추후에 추가하겠지만 이 정도로도 우선은 헷갈리는 부분은 정리가 된 것 같아서 블로그에 올리려고 한다.





1. mmc

  먼저 mmc.exe와 관련한 정리다. 이것은 UAC Bypass에서도 자주 나오므로 겸사 겸사해서 정리하기로 하였다. 만약 실행 창에서 "서비스"나 "작업 스케줄러"를 실행시키면 실제로는 mmc.exe가 실행되는 것을 확인할 수 있다. 물론 아이콘이라던지 UI는 다르지만 유사한 것을 확인할 수 있다.


  정확히는 "서비스"의 경우 다음과 같이 실행된다.

"C:\Windows\system32\mmc.exe" "C:\Windows\system32\services.msc" 


  그리고 "작업 스케줄러"는 다음과 같다.

"C:\Windows\system32\mmc.exe" "C:\Windows\system32\taskschd.msc" /s


  mmc.exe 즉 Microsoft Management Console은 snap-in이라고 불리는 COM 객체들을 호스트할 수 있다. 위에서 본 것과 같이 대부분의 MS 관리 도구들은 MMC snap-in들로 구현되어 있다. 스냅인은 .msc 확장자를 가지며 mmc의 인자로 사용된다. 참고로 스냅인들은 다음 레지스트리에 등록되어 있다고 한다.

[HKEY_CLASSES_ROOT]\{CLSID}

[HKEY_LOCAL_MACHINE\Software\Microsoft\MMC\Snapins]





2. 작업 스케줄러

  위에서 "작업 스케줄러"를 실행시키면 mmc를 통해 taskschd.msc를 인자로 받아서 GUI 형태의 관리 프로그램이 실행되는 것을 확인하였다. 이것은 mmc 기반으로 관리자를 위한 GUI 형태로 제공되는 것으로 보이며 커맨드 라인 프로그램으로는 schtasks.exe와 at.exe가 있다. at.exe는 deprecated 된 것으로 취급되므로 schtasks.exe만 보기로 한다.


  다음 간단한 예제를 이용해서 작업을 등록해 보았다.

> schtasks.exe /Create /TN "Hello" /ri 1 /st 15:58 /du 9999:59 /sc daily /f /TR C:\Windows\System32\cmd.exe


  이후 실행 과정을 보면 "svchost.exe -k netsvcs"로 실행된 svchost.exe가 taskeng.exe를 실행시키는 것을 확인할 수 있다. 앞의 서비스 관련 개념과 연관해서 봤을 때 작업 스케줄링을 전담하는 서비스가 있는 것 같다.


  이 때 인자로 다음과 같이 준다.

taskeng.exe {xxxx252E-5AFA-xxxx-8BD7-9E914C08xxxx} S-1-5-21-xxxx556725-xxxx805062-xxxx730372-1000:PC090\xxxx:Interactive:[1]


  시간이 되면 taskeng.exe는 cmd.exe를 실행시키게 된다. 참고로 taskeng.exe 및 하위 프로세스는 관리자 권한이며 svchost.exe는 시스템 권한이다.


  더 자세히 설명하기 위해 먼저 svchost.exe의 행위부터 보겠다. 이것은 다음 레지스트리 키를 생성한다.

HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\Handshake\{xxxx252E-5AFA-xxxx-8BD7-9E914C08xxxx}\data


  데이터를 보면 바이너리 형태이기도 해서 그냥 그렇다는 것만 확인하였다. 그리고 Hello라는 이름의 파일을 \system32\Tasks 폴더에 생성한다. 해당 파일을 확인해 보니 xml 형태로서 작업 스케줄링과 관련된 내용들이 들어가 있다. 즉 시간이라던지 경로명 등의 정보들이다.


  이후 taskeng.exe를 실행시킨다. taskeng.exe는 "Task Scheduler Engine"으로서 하며 작업 관리자에 의해 실행되고, svchost.exe에 의해 호스트되는 프로그램이다. 이것은 앞에서 생성한 레지스트리 키를 읽고(더 확인해야 한다), 그리고 앞에서 생성한 Hello 파일을 읽는다. 이후 이것을 참조하여 cmd.exe를 실행시킨다.


  참고로 현재 환경은 윈도우 7이었는데, 윈도우 10에서는 svchost.exe -k netsvcs가 taskeng.exe를 실행시키고 taskeng.exe가 실제 cmd.exe를 실행시키는 방식이 아닌, svchost.exe -k netsvcs가 taskeng.exe를 거치지 않고 cmd.exe를 직접 실행시키는 방식으로 변경되었다.


  그리고 .job 파일과 관련해서 찾아보니, 과거 악성코드 기록에서 "\system32\tasks\에 {35DC3473-A719-4d14-B7C1-FD326CA84A0C}.job" 및 "{8C3FDD81-7AE0-4605-A46A-2488B179F2A3}.job" 파일을 만든다고 하는 것을 보면, 해당 폴더에 작업 이름(Hello)으로 생성한 것과는 차이가 있는데 (.job 확장자 외에도 작업 이름 대신 레지스트리 이름이 들어감) 단순한 버전 차이인지는 모르겠다.





3. taskhost.exe

  참고로 프로세스 익스플로러를 보면 wininit.exe의 자식으로 services.exe가 실행 중인 것을 확인할 수 있다. 이 services.exe 아래에는 여러 exe들과 다수의 svchost.exe가 존재한다. 상당 수의 svchost.exe는 위의 링크에서 볼 수 있듯이 서비스와 관련된 것들이다. 사실 여기서 굳이 이 내용을 언급하는 것은 services.exe의 자식 프로세스들 중에서 svchost.exe 외에도 다른 exe들 중에는 taskhost.exe도 있다는 것을 말하기 위함이다.


  이것은 "WIndows 작업을 위한 호스트 프로세스"로서 윈도우 7에서는 taskhost.exe이지만, 윈도우 8에서는 taskhostex.exe, 윈도우 10에서는 taskhostw.exe이다. 어쨌든 exe 형태가 아닌 dll 형태의 작업들을 위한 호스트 프로세스라고 한다. 서비스의 경우 svchost.exe와 비슷해 보인다. 참고로 Process Explorer에서 마우스 커서를 대보면 "Tasks:" 아래에 로드된 작업으로 추정되는 것들이 다음과 같이 나오는 것을 확인할 수 있다.

Microsoft PlaySoundService Class [\Microsoft\Windows\Multimedia\SystemSoundsService]

MsCtfMonitor task handler[\Microsoft\Windows\TextServicesFramework\MsCtfMonitor]





4. etc

  작업 관리자 즉 Task Manger는 taskmgr.exe이다.



Posted by SanseoLab

블로그 이미지
Malware Analyst
SanseoLab

태그목록

공지사항

Yesterday
Today
Total

달력

 « |  » 2024.4
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

최근에 올라온 글

최근에 달린 댓글

글 보관함