Windows Sysinternals Suite의 PsTools는 콘솔 명령어, 배치 파일에서 실행 가능한 12개의 윈도우 원격 관리 파일이다.


로컬 및 원격 시스템에서 실행이 가능하며 원격 시스템에 특정 명령어를 전송하려고 별도의 파일을 설치하지 않고, 로컬 시스템에서 해당 파일과 매개변수를 지정하면 원격 시스템에 명령어 전송이 가능해 원하는 정보를 획득할 수 있다.


○ PsExec : 여러 대의 시스템에서 임의의 프로세스 실행

○ PsFile : 원격 시스템에 열려 있는 파일 목록 조회

○ PsGetSid : 로컬/원격 시스템의 컴퓨터, 사용자, 그룹의 보안 식별자 조회

○ PsInfo : 시스템의 설치 방식, 커널 빌드 넘버, 시스템 시작 시간, 등록된 사용자와 조직 등 정보 수집

○ PsKill : 로컬/원격 시스템의 실행중인 프로세스 종료


○ PsList : 로컬/원격 시스템의 프로세스 목록, 메모리, CPU 사용량 조회

○ PsLogList : 로컬/원격 시스템의 이벤트 로그 조회

○ PsPasswd : 로컬/원격 시스템의 사용자 계정 패스워드 설정

○ PsShutdown : 로컬/원격 시스템 종료, 재부팅

○ PsSupend : 로컬/원격 시스템의 프로세스 일시 정지

○ PsService : 로컬/원격 시스템의 서비스, 드라이버 조회


PsTools 환경 구축

PsTools에 포함된 모든 도구들은 로컬 시스템보다 원격 시스템의 정보를 획득하거나 제어하기 위한 용도로 사용한다. 해당 도구를 사용하려면 3가지의 조건을 만족해야 된다.


1. 원격 시스템의 기본 공유 폴더에 IPC$, ADMIN$ 숨김 공유 폴더 존재

2. 사용자 계정 컨트롤 비활성화

3. 방화벽 규칙에 파일 및 프린트(TCP 445) 활성화


윈도우 시스템은 기본적으로 IPC$, ADMIN$, C$, D$ 등 숨김 공유 폴더가 활성화 되어 있다.


만약, 숨김 공유 폴더가 존재하지 않으면 시작 > 실행 > fsmgmt.msc > 공유 폴더(로컬) > 공유 순서대로 접근하여 해당 폴더의 공유를 활성화하면 된다.



사용자 계정 컨트롤(UAC, User Account, Control)은 윈도우 비스타 이상 버전에서 도입된 기능으로 사용자가 프로그램 실행 시 프로그램에서 관리자 수준의 권한이 필요할 때, 사용자에게 알려 제어할 수 있는 보안 기능이다.


사용자 계정 컨트롤이 활성화 되어 있으면 PsTools에 포함된 모든 도구를 실행 시 관리자 수준의 권한이 필요할 때 마다 요청하므로 비활성화 해야 한다.


시작 > 제어판 > 사용자 계정 > 사용자 계정 컨트롤 설정 > 알리지 않음 순서대로 설정하고 재부팅을 하면 적용된다.



원격 시스템의 방화벽이 활성화 되어 있으면 파일 및 프린트 공유 규칙을 허용(TCP 445)해야 한다.


시작 > 제어판 > Windows 방화벽 > 허용되는 프로그램 > 파일 및 프린터 공유 항목에 체크를 하면 TCP 445 포트가 활성화 된다.



PsExec 옵션

PsExec는 로컬/원격 시스템에 임의의 프로세스를 실행할 수 있는 도구로 로컬 시스템의 시스템 계정을 획득하거나 원격 시스템의 쉘을 획득할 용도로 사용한다.


원격 시스템에 에이전트나 클라이언트를 미리 설치할 필요는 없지만 원격 시스템에 인증 가능한 계정이 필요하다.


옵션 설명
-u 사용자 계정 원격 시스템의 사용자 계정 이름
-p 패스워드 원격 시스템의 사용자 계정 패스워드
-c 파일경로 로컬 시스템에 존재한 파일을 원격 시스템으로 복사
-f -c 옵션 실행 시 동일한 파일이 존재하면 강제로 복사
-s 시스템 권한으로 프로그램 실행
-i 세션 대화형 데스크톱에서 프로그램 실행
-d 프로세스가 종료될때까지 기다리지 않음

로컬 시스템의 시스템 권한 획득

윈도우의 관리자 계정은 Administrator 계정이지만 해당 계정으로 수행할 수 없는 작업이 존재한다. 예를 들면, SAM 파일은 SYSTEM의 사용 권한이 부여되어 있으므로 Administrator 계정으로 파일 내용을 볼 수 없다.


SAM은 사용자 계정 정보를 해시 값 형태로 자장한 파일로 윈도우 시스템을 부팅하고 로그인을 할 때, SAM에 저장된 정보와 사용자가 입력한 정보를 비교하여 일치하면 로그인이 성공된다.


실습 환경은 윈도우7의 Administrator 계정으로 로그인을 한 상태인데, SAM 정보가 저장된 레지스트리 쿼리(HKLM\SAM\SAM)를 조회하면 접근이 거부 메시지가 출력된다.


C:\Windows\System32\SAM 파일의 권한을 보면 시스템 권한으로 실행되므로 이외의 다른 계정은 해당 파일을 읽을 수 있는 권한이 없다.



whoami 명령어를 입력하면 현재 로그인을 한 사용자의 아이디를 확인할 수 있으며, Administrator 계정으로 로그인을 했으므로 해당 계정이 나타난다.


psexec.exe를 실행 시 옵션으로 -sid, 실행할 명령어를 cmd를 지정하면 새로운 프로세스에 시스템 권한의 쉘이 생성된다. 시스템 권한의 쉘이 생성되었으므로 SAM 레지스트리 쿼리를 조회하면 SAM 파일의 내용이 해시 값 형태로 나타난다.



원격 시스템의 쉘 획득

로컬 시스템에서 원격 시스템의 쉘을 획득하려면 psexec.exe [\\원격IP] -u [사용자 계정] -p [사용자 패스워드] [실행 명령어] 형식으로 입력하면 된다. 해당 명령어를 정상적으로 입력하면 원격 시스템의 Administrator 계정의 쉘이 획득된다.



원격 시스템(10.10.10.6)에서 net session 명령어를 입력하면 자신의 시스템에 임의의 사용자가 접속했는지 확인할 수 있다. 현재 10.10.10.1 아이피 주소를 가진 시스템에서 Administrator 계정으로 약 10분 동안 세션이 유지된 것으로 확인된다.


관리자가 모르는 임의의 사용자이므로 해당 시스템을 추방하려면 net session [\\원격IP] /delete 형식의 명령어를 입력하면 된다.


해당 명령어를 정상적으로 입력하면 자신의 시스템에 접속된 사용자의 세션이 끊어지고, net session 명령어를 입력하면 연결된 세션이 없다고 나온다.



원격 시스템에 악성코드 업로드 및 실행

로컬 시스템에 존재한 임의의 파일을 원격 시스템에 업로드 및 실행할 수 있다. psexec.exe -d [\\원격IP] -cf [로컬 시스템에 존재한 파일 이름] 형식으로 입력하면 된다.


해당 명령어를 정상적으로 입력하면 로컬에 존재한 파일을 원격 시스템에 업로드를 하고, 해당 프로세스 아이디가 출력된다.


실행할 파일은 실질적은 악성코드가 아니라 프로세스 정보를 보여주는 procexp.exe 파일이다.



원격 시스템에서 현재 실행중인 프로세스 정보를 보면 psexec.exe 자식 프로세스로 procexp.exe 프로세스가 동작한다. 해당 프로세스의 아이디를 보면 2348로 상기 이미지의 프로세스 아이디와 동일하다.


-cf 옵션을 지정하면 원격 시스템의 C:\Windows\System32 디렉토리에 파일을 업로드를 하고, 실행 파일이라면 자동으로 실행한다.


만약, 업로드할 파일이 자동으로 실행되는 악성코드라면 더 큰 위협이 발생한다.



▶ Process Explorer 기능 및 사용법

▶ Process Monitor 기능 및 사용법

▶ BgInfo 시스템정보 기능 및 사용법

▶ TCPView 기능 및 사용법

▶ AutoRuns 기능 및 사용법

  • 카카오톡-공유
  • 네이버-블로그-공유
  • 네이버-밴드-공유
  • 페이스북-공유
  • 트위터-공유
  • 카카오스토리-공유