[windows] 윈도우 이벤트 분석 (2) - RDP(원격 연결) & 로그온 기록 분석
감사, 포렌식 그리고 침해사고 분석에서 어떤 컴퓨터에 누가 로그온을 했는지 또 어떤 IP 가 접근했는지 파악하는 것이 굉장히 중요하다.
윈도우에서는 이러한 로그온 기록들을 security.evtx 에 기록하고 있다. 사실 security 이벤트에는 계정 생성이나 삭제 로그온 실패 로그오프 등 좀더 다양하고 많은 정보들이 기록된다. 또 원격지에서 로그인 한 IP는 Local Session Manager-Operational.evtx 에서 확인 가능하다. 이번 포스팅에서 우리는 컴퓨터 로그온 기록과 원격지 접속 기록을 분석하는 방법을 확인 해 볼 것이다.
이번 포스팅에서 우리가 분석할 이벤트는 이 두개다.
1. Security.evtx 분석
지난 포스팅에서 security 이벤트의 각 칼럼이 나타내는 내용들을 간단하게 정리했었다. 사용자 로그온, 로그온 실패, 로그오프 관련 이벤트 ID는 4624, 4625, 4634 다. 다른 몇 가지 중요한 기능들과 같이 표로 정리해보면 다음과 같다.
구분 | 이벤트 ID |
로그온 성공 | 4624 |
로그온 실패 | 4625 |
로그오프 | 4634 |
계정 생성 | 4720 |
계정 비밀번호 변경 | 4724 |
계정 삭제 | 4726 |
윈도우 보안 이벤트 분석을 할때 위 6가지 이벤트 ID는 꼭 기억하길 바란다. 실제로 똑같이 확인되는지 이벤트 로그를 한번 확인해보자. 필자는 지난 포스팅에서 소개했던 message analyzer를 사용할 것이다.
security 이벤트를 열어 필터식으로 필터링 하였다. 위 이미지에서 4624, 4625, 4634 이벤트가 어떤 내용과 연결되는지를 확인해보라.
필자가 사용한 필터링 식은 다음과 같다.
EventLog.EventID == 4625 or EventLog.EventID == 4634 or EventLog.EventID == 4720 or EventLog.EventID == 4724 or EventLog.EventID == 4726 or
(EventLog.EventID == 4624 and (EventLog.EventData["LogonType"] == 2 or EventLog.EventData["LogonType"] == 3 or EventLog.EventData["LogonType"] == 7 or EventLog.EventData["LogonType"] == 10))
1-1. 4624 로그온 성공 유형 분류
4624 로그온 성공 이벤트에는 로그온 유형이라는 것이 존재한다. 이 로그온 유형은 1~13 값을 가지는데, 다음 표를 참고하라. 참고로 다음 표는 이글루 시큐리티의 원격 데스크톱(RDP) 악용 침해사고 이벤트 로그 분석 글을 참조했다. 링크는 마지막에 있는 참조를 확인하면 되겠다.(굉장히 잘 정리된 글이니 참고하면 도움이 많이 될 것이다)
로그온 유형 |
로그온 제목 | 설 명 |
0 | System | 시스템 시작과 같이 시스템 계정에서만 사용 |
2 | Interactive | 사용자가 로그온한 경우 |
3 | Network | 네트워크에서 로그온한 사용자 또는 컴퓨터 |
4 | Batch | 직접적인 개입 없이 사용자를 대신하여 프로세스가 실행될 수 있는 일괄 처리 서버에서 사용 |
5 | Service | 서비스 제어 관리자가 서비스를 시작 |
7 | Unlock | 잠금 해제된 경우 |
8 | NetworkCleartext | 사용자가 네트워크에서 로그온한 경우로, 사용자의 암호가 인증 패키지에 전달된 언해시(unhash) 양식 |
9 | NewCredentials | 호출자에서 현재 토큰을 복제하고 아웃바운드 연결에 대한 새 자격 증명을 지정한 경우 (새 로그온 세션은 로컬 ID가 동일하지만 다른 네트워크 연결에 대해 서로 다른 자격 증명을 사용) |
10 | RemoteInteractive | 사용자가 터미널 서비스 또는 원격 데스크톱을 사용하여 원격 로그온 |
11 | CachedInteractive | 사용자가 컴퓨터에 로컬로 저장된 네트워크 자격 증명을 사용하여 로그온한 경우 (도메인 컨트롤러에 연결하여 자격 증명을 확인하지 못함) |
12 | CachedRemoteInteractive | RemoteInteractive와 동일 (내부 감사에 사용) |
13 | CachedUnlock | Workstation logon |
일반적으로 사용자와 상호작용으로 인해 발생하는 이벤트는 2, 3, 7, 10 네 개 이므로 필자는 네 개 로그온 유형에 대해서 필터링을 진행했다.
각 항목이 어떤의미를 가지는지에 대해서는 지난 포스팅에서 설명했기때문에 생략하도록 하겠다.
2. Local Session Manager 분석
로컬세션매니저 이벤트의 전체 이름은 Microsoft-windows-Terminalservices-LocalSessionManager%4Operational.evtx 다. 이 이벤트에서는 외부에서 현재 컴퓨터로 RDP 연결을 수행한 이력을 확인할 수 있다.
이 로컬 세션 매니저에서 우리가 주의깊게 살펴봐야 할 이벤트 ID 는 다음과 같다.
구분 | 이벤트 ID |
세션 로그온 성공 | 21 |
셸 시작 알림 받음 | 22 |
세션 로그오프 성공 | 23 |
세션 연결 끊김 | 24 |
세션 다시 연결 | 25 |
의도적 연결 해제 | 39 |
세션 연결 끊김&재 연결 | 40 |
사실 이 중에서 가장 주의깊게 볼 이벤트는 21, 24,25, 40 네 가지다. 다음 그림을 보자
로컬 세션 매니저 로그에서는 IP 주소와 로그온 계정 세션 정보 등을 확인할 수 있다. 사용된 필터식은 아래 코드를 보라.
EventLog.EventID == 21 or EventLog.EventID == 22 or EventLog.EventID == 23 or EventLog.EventID == 24 or EventLog.EventID == 25 or EventLog.EventID == 39 or EventLog.EventID == 40
2-1. 21 세션 로그온 성공
윈도우 데스크탑 환경은 세션 단위로 구분되며 사용자에게 제공된다. 즉 사용자가 어떤 credential을 사용해 사용자 인증에 성공하였고, 세션이 생생되었음을 의미한다. 여기서는 세션 ID, 로그온 계정 그리고 로그온 IP를 확인할 수 있다.
2-2. 24 세션 연결 끊김 & 25 세션 다시 연결
사용자가 연결을 끊거나 다시 연결한 경우에 기록된다. 여기서도 세션 ID, 로그온 계정 그리고 로그온 IP를 확인할 수 있다. 이 연결이 끊어지는 경우에는 다양한 사유가 있다. 예시를 몇 가지 들어보겠다.
- RDP 창을 최소화 한 경우
- 오른쪽 상단의 창닫기(X)를 눌러 종료한 경우
- RDP 연결(로그온) 된 상태에서 새롭게 RDP 연결 한 경우
- 네트워크 불안정
등 다양한 케이스가 있다.
2-3. 39 의도적 연결 해제
RDP 연결시 종료 아이콘에서 위 사진과 같이 '연결 끊기' 기능을 확인할 수 있다. 이 연결 끊기 기능을 사용해 연결을 종료한 경우 39번 이벤트가 남는다.(라고한다) 사실 이렇게 종료하는 경우가 굉장히 드물기 때문에 잘 보기 힘든 이벤트 이기도 하다.
필자의 경우에는 2개가 남아있는데, 아마 예전에 심심해서 몇 번 해본것 같다.(잘 기억안남)
2-4. 40 세션 연결 끊김 & 재 연결
해당 이벤트는 연결 해제와 재 연결 모두와 관련이 있다. 다음 표를 참고하자
이유 코드 | 설 명 | 비 고 |
0 | 추가 정보를 확인할 수 없습니다. | 사용자가 비공식적으로 (사용자가 원격 데스크톱창에서 X를 클릭) 원격 데스크톱 세션을 종료한 경우 (이벤트 ID : 24와 관련 있음) |
5 | 클라이언트의 연결이 다른 연결로 대체되었습니다. | 사용자가 원격 데스크톱 세션에 재연결 했을 경우 (이벤트 ID : 25와 관련 있음) |
11 | 사용자 활동이 연결 해제를 시작했습니다. | 사용자가 정상적으로 (예: 시작 > 전원 > 연결 해제 클릭) 원격 데스크톱 세션을 종료한 경우 (이벤트 ID : 39와 관련 있음) |
12 | 로그오프를 시작했습니다. | 세션을 로그오프하여 연결이 끊어졌음 |
3. 생각하며 분석하기
3-1. 넓은 시각 가지기
사용자가 로그온 한 기록을 확인하려면 가장 먼저 security.evtx 를 확인해야한다. 이 외에도 사용자가 로그온 했음을 추정할 수 있는 이벤트가 몇 가지 더 있다.
예를 들면 레지스트리 이벤트에서 ntuser 레지스트리가 로드되었다는 이벤트가 발생하면 실제 로그온이 발생하였다고 추정할 수 있다. 다만 이러한 이벤트 기록은 로그온을 간접적으로 추정할 수 있는 기록일 뿐이다. 가장 정확하고 좋은 것은 security.evtx 에서 기록을 확인하는 것이다.
다만 이 security.evtx 에는 치명적인 단점이 존재한다. 다음을 보라
- 갱신이 굉장히 빈번하다.
- 기록되는 이벤트가 너무 많다.
- 이벤트 로그의 크기가 제한되어있다.
- 따라서 overwrite가 발생한다.
이런 이유때문에 기록을 확인할 수 없는 경우가 굉장히 많다. 가장 좋은 방법은 이벤트로그 용량을 키워놓거나, 용량이 가득 차면 별도 파일로 백업하도록 설정하는 것이지만, 모든 사용자가 이러한 기능들을 적용 하였을것이라 기대하기는 힘들다.
그럴 때 우리는 local session manager 이벤트를 참고할 수 있다. 원격 연결에 대해서 직접 로그온한 기록을 남기는 것이므로 공격자 또는 사용자의 활동 내역을 추정할 수 있는 근거가 된다. 즉 각 이벤트 로그들을 서로 별개라고 생각하지말고 서로를 연관지어 생각할 수 있다면 분석의 깊이가 훨씬 넓어질 것이라는 의미다.
3-2. 로그온 기록에 따른 사용자 구분
만약 어떤 서버나 PC가 해킹당했다고 한다면 공격자는 어떤 방법으로든 원격지에서 해당 컴퓨터로 원격 접속을 수행하였을 것이다. 따라서 우리는 공격자의 행동 을 로그온 성공 ~ 로그오프 사이 시간으로 확정지을 수 있다. 또한 같은 PC를 여러명이 사용하는 환경에서도 로그온이 발생한 기록으로 어떤 사용자가 어느 시간대에 컴퓨터를 사용 하였는지 구분 가능할 것이다.
4. 참조
security 이벤트 관련 MSDN
https://learn.microsoft.com/ko-kr/previous-versions/windows/it-pro/windows-10/security/threat-protection/auditing/basic-audit-logon-events
Audit logon events - Windows 10
Determines whether to audit each instance of a user logging on to or logging off from a device.
learn.microsoft.com
원격 데스크톱(RDP) 악용 침해사고 이벤트 로그 분석
01. 개요 원격 데스크톱(Remote Desktop Protocol : RDP)은 마이크로소프트사 Windows OS의 구성요소로 ITU-T.128 어플리케이션 프로토콜의 확장이다. 최초 1996년 Windows NT 4.0에서 Terminal Service Client로 출
www.igloo.co.kr
ExtendedDisconnectReasonCode 열거형 - Win32 apps
컨트롤의 연결 끊김 이유에 대한 확장 정보를 정의합니다.
learn.microsoft.com
RDS Session Host Server Disconnect Codes
RDS Session Host Server Disconnect Codes Article 1/17/2024 In this article --> Summary: This article contains the current Remote Desktop Server client disconnect codes and reasons. These events are logged on the machine hosting the Remote Desktop Session.
learn.microsoft.com