지난 포스팅에 이어 권한 상승 2편이다.
필자는 MITRE ATT&CK 페이지를 살펴보는게 취미다.
아직 실력에 자신이 없어서이기도 하고, 새로운 기술들을 살펴보는게 재밌기 때문이기도 하다.
현대 발생하는 취약점 중 가장 위험한 것 몇가지를 꼽아보라면 필자는 다음 세 개를 들어보고싶다.
LPE, RCE, SQLI
각각 Local Privilege Escalation, Remote Code Execution, SQL Injection 이다.
특히 RCE와 LPE가 합쳐진다면 그 파괴력은 가히 무시무시해진다.
그래서 항상 이런 LPE나 RCE 취약점이 발견되면 소프트웨어나 운영체제는 hot fix를 내놓는다. 여러분들도 보안패치는 바로바로 수행하길 바란다.
1. MITRE의 Tactic
MITRE ATT&CK은 공격자의 모든 행위를 크게 14개 카테고리로 분류했으며 이를 Tactic이라 한다. 전술이라는 뜻이다. 이 14개에는 다음 목록이 있다.
1-1. MITRE ATT&CK Tactic
영어 | 해석 |
---|---|
Reconnaissance | 정찰 |
Resource Development | 자원 개발 |
Initial Access | 초기 접근 |
Execution | 실행 |
Persistence | 지속성 유지 |
Privilege Escalation | 권한 상승 |
Defense Evasion | 방어 회피 |
Credential Access | 인증 정보(자격 증명) 접근 |
Discovery | 탐색 |
Lateral Movement | (위상적인) 횡적 이동 |
Collection | 수집 |
Command and Control | 명령 제어 |
Exfiltration | 정보 유출 |
Impact | 영향 |
여기서 필자가 가장 관심있는 부분은 바로 Privilege Escalation과 Defense Evasion 이다.
이는 정보보안 관점에서 보았을 때 공격자가 목표 대상 서버에 침투 후 수행하는 가장 중요한 전술이기 때문이다.
1-2. MITRE ATT&CK Technique, Privilege Escalation
MITRE에서는 권한 상승 방법에 대해 다음과같이 세부 기술(Technique)으로 구분 했다. 각 technique의 오른쪽 숫자는 하위 technique의 개수를 의미한다. 따라서 현재 Enterprise 에는 약 96개의 권한 상승 기술이 정리되어 있는 것이다.
그리고 각 기술들에는 T0000 으로 정의되는 기술번호가 붙어있으며 세부 기술에는 T0000-000 처럼 세부 번호가 부여되어 있다.
Abuse Elevation Control Mechanism (6) Access Token Manipulation (5) Account Manipulation (7) Boot or Logon Autostart Execution (14) Boot or Logon Initialization Scripts (5) Create or Modify System Process (5) Domain or Tenant Policy Modification (2) Escape to Host Event Triggered Execution (17) Exploitation for Privilege Escalation Hijack Execution Flow (12) Process Injection (12) Scheduled Task/Job (5) Valid Accounts (4)
2. T1574 Hijack Execution Flow - 실행 흐름 탈취
자 그래서 이번 장에서는 저 많은 기술들 중 Hijack Execution Flow에 대해서 한번 얘기해보려고 한다.
이 기술은 운영체제에 존재하는 정상 프로그램이나 기본 동장의 흐름을 탈취(hijack) 하는 것을 의미한다.
권한상승 뿐만 아니라 Defense Evasion, Persistance에도 활용될 수 있다.
서브 테크닉은 다음과 같다.
ID | Name |
---|---|
T1574.001 | DLL |
T1574.004 | Dylib Hijacking |
T1574.005 | Executable Installer File Permissions Weakness |
T1574.006 | Dynamic Linker Hijacking |
T1574.007 | Path Interception by PATH Environment Variable |
T1574.008 | Path Interception by Search Order Hijacking |
T1574.009 | Path Interception by Unquoted Path |
T1574.010 | Services File Permissions Weakness |
T1574.011 | Services Registry Permissions Weakness |
T1574.012 | COR_PROFILER |
T1574.013 | KernelCallbackTable |
T1574.014 | AppDomainManager |
2-1. Registry Modulation
레지스트리에는 실행흐름을 hijack할 수 있는 여러가지 키가 존재한다. 다만, 현재 최신 os에서는 윈도우 디펜더가 거의 잡아낼뿐만아니라 보안 패치가 적용되어 있기 때문에 트리거하기가 녹록하지는 않다. 다음 키를 보자.
HKCU\Software\Classes\mscfile\shell\open\command
이 키를 다음과 같이 변조하면 .msc 파일을 실행할때 흐름을 탈취할 수 있다.
|
|
이벤트뷰어 eventvwr는 system32 경로에 존재하며, 또 system권한으로 실행되어 흐름을 탈취해 권한 상승에 악용하는 경우가 있었다고 들었는데, 윈도우 11에서는 패치가 된것같다.
아무튼 중요한 것은 이렇게 hijacking으로 임의 코드나 프로그램을 실행할 수 있다는 것이다.
2-2. T1574.001 DLL
windows에서는 dll을 이용한 공격이 많다. 아무래도 일반 사용자들도 어느 정도 실행 프로그램에는 조심을 하지만 dll은 잘 모르기도 하고 그냥 괜찮겠지 하는 생각이 크기 떄문일 것이다. DLL을 이용한 대표적인 예시로는 DLL Sideloading, DLL injection, DLL hijacking 등이 있다.
이 중 DLL Sideloading과 DLL Hijacking은 비슷한 공격 방법이지만, DLL Hijacking이 좀더 넓은 범위를 다룬다고 생각하면 좋겠다.
예를 들어보자. 다음과 같은 공격 방법을 실행해볼 수 있다.
어떤 프로그램(공격자가 작성한)과 mal_fn.dll 이 같은 경로에 존재한다. 실행 파일은 mal_fn.dll 을 로드하며, 이 mal_fn.dll 은 난독화되어 백신이 탐지할 수 없다. 프로그램을 실행하는 순간 mal_fn.dll 이 로딩되며 난독화가 풀리고 메모리에 적재된다.
어떤 정상 프로그램이 실제 윈도우에 존재하는 winsta.dll 을 로드하고, dll의 함수를 사용한다고 가정하자. 공격자는 해당 실행 프로그램이 존재하는 경로에 같은 이름의 악성 winsta.dll을 생성하고, 그 함수 이름으로 다른 악성 행위를 하는 함수를 작성한다. 정상프로그램을 실행하면 원래 로드되어야하는 c:/windows/system32/winsta.dll 이 로드되지 않고, 실행 프로그램과 같은 경로에 있는 악성 winsta.dll 이 import 되어 실행된다.
이미 실행되어 있는 어떤 프로세스의 메모리 공간에 악성 DLL을 강제로 주입한다.
2-3. T1574.007 Path Interception by PATH Environment Variable
환경 변수를 조작하는 방법이다. 현대 거의 모든 운영체제에서 공격 가능하다.
2-3. T1574.008 Path Interception by Search Order Hijacking
DLL Sideloading 과 유사하지만, dll이 아니라 실행프로그램(exe)을 사용한다는데 차이가 있다.
2-4. T1574.011 Services Registry Permissions Weakness
나중에 계속..