Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
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
Archives
Today
Total
관리 메뉴

의미없는 블로그

PsExec 로 원격 명령어 실행 본문

# 나/pentest (WEB)

PsExec 로 원격 명령어 실행

SaltLee 2019. 1. 21. 15:37

PsExec는 윈도우의 원격 명령어 도구라고 보면 되겠다

 

https://download.sysinternals.com/files/PSTools.zip 에서 다운받아서

환경 변수로 등록해서 사용하던지 그냥 사용하던지..

 

PsExec는 윈도우의 SMB(Server Message Block) 프로토콜을 사용하는것 같은데

SMB는 파일, 프린터 등 공유 관련 프로토콜이다

 

그래서 PsExec 사용 조건 중 하나가

명령어를 날릴 대상 서버에 IPC$, ADMIN$ 공유가 존재해야 한다는 것이다

(IPC$는 원래 삭제 불가한 것 같고 ADMIN$은 삭제할 경우 PsExec 명령어 날리면 실패함)

 

IPC$ : Remote IPC

ADMIN$ : Remote Admin

 

어쨌든 이 두개 공유는 디폴트로 존재하기 때문에 별도로 삭제한 적이 없다면 그냥 테스트 하면 됨

대상 서버의 계정정보를 획득했다는 전제 조건을 가지고 테스트... 

 

VM에서 net share 명령어로 확인 결과 IPC$, ADMIN$ 공유 존재함

 

일단 PsExec로 ipconfig 명령어 날려보면..

administrator 계정의 경우 명령어 아주 잘 실행된다

 

PsExec.exe \\[VM IP] -u [VM 아이디] -p [VM 패스워드] [날릴 명령어]

 

와이어샤크로 패킷 보면 ADMIN$ 공유 사용해서 PSEXESVC.exe 파일을 서버에 공유해서 명령어 실행시키는 듯 하다(File > Export Objects > SMB)

 

보통 SMB 포트로 445를 많이 알고 있는데 이것 말고도 137, 138, 139 도 있다

TCP 환경에서는 445와 139를, UDP 환경에서는137과 138을 사용한다고 한다

 

저 명령어 날리면서 와이어샤크로 잡아보면 445 포트를 사용하고 있음을 볼 수 있다(Statistics > Conversations)

 

VM의 방화벽에서 445 포트를 차단해보자(관리 도구 > 고급 보안이 설정된 Windows 방화벽 > 인바운드 규칙 > 445 포트 연결 차단)

 

다시 PsExec 명령어 날려보면 445 포트 대신 139 포트 사용하고 있는것 볼 수 있다

 

즉, SMB 445 포트를 차단하면 TCP/139 포트로 대체하여 명령어가 실행되므로

445, 139 포트 모두를 차단하는 것이 대응방안이 될 수 있겠다

(UDP 포트의 경우는 잘 사용하지 않는 듯 함, 랜섬웨어 대응방안에도 445, 139 포트만 막아도 충분하다고 써있음)

 

무튼 139 포트까지 다 차단하고 다시 PsExec 명령어 날려보면 실패하는 것 볼 수 있다

 

445, 139 포트 차단 시 원격 명령 실패

 

와이어샤크로 캡쳐해보면 445, 139 포트에 대해 TCP 접속이 원활하지 않아 Retransmission 이 발생하고 있는것 볼 수 있음

 

139, 445 포트 다 열려있는 첨 상태에서

administrator 말고 다른 계정은 PsExec가 안되는 경우가 있는데

그 이유는 해당 계정이 속한 그룹 차이 때문이다

 

administrator, root, pentest 세개의 계정을 만들었는데

각각 Administrators 그룹, Domain Admins 그룹, Domain Users 그룹의 권한을 가진다

 

Administrators 그룹, Domain Admins 그룹에 속해있을 때는 PsExec 명령이 실행되지만

Domain Users 그룹에는 PsExec 명령을 실행할 권한이 없다

 

Domain Users 그룹 권한을 가지는 pentest 계정은 액세스가 거부됨

 

이제 UAC에 따른 PsExec 결과를 알아보자..

UAC(User Access Control)는 어떤 프로그램을 실행할 때 사용자 권한을 확인하는 보안 절차 같은 것이다

 

Windows 2008은 기본으로 On 상태인것 같고 따로 수준 설정도 없는 듯 하다

 

Win 7은 수준 설정을 할 수 있는데 기본이 3수준인것 같다

 

정리하자면.. 일단 Domain Users 나, 그냥 Users 나 유저 권한에서는 UAC 상관없이 PsExec 실행 안됨

 

AD 환경에서

- UAC 설정되어있는 경우 : Administrators, Domain Admins 그룹 권한이 존재할 경우 계정명(Administrator) 상관없이 PsExec 실행 가능

- UAC 설정되어있지 않은 경우 : 더 취약한거니깐 위랑 똑같음

 

AD 환경이 아닐 때 

- UAC 설정되어있는 경우(3 Level) : administrator 계정은 PsExec 실행 가능, Administrators 그룹에 속한 다른 계정은 실행 불가

- UAC 설정되어있는 경우(1 Level) : administrator 계정, Administrators 그룹에 속한 다른 계정 모두 PsExec 실행 가능

- UAC 설정되어있지 않은 경우 : 더 취약한거니깐 위(1 Level)랑 똑같음

 

대응방안은 

- Admin$ 를 없앤다   계정 상관없이 PsExec 사용 못하게 됨

- 445, 139 포트 차단   계정 상관없이 PsExec 사용 못하게 됨

- UAC 3으로 설정   administrator 계정만 PsExec 사용 가능

reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\system /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 0 /f   administrator 계정만 PsExec 사용 가능 

 

 

 

Comments