Netwrix 1Secure는 데이터와 아이덴티티 전반에 걸쳐 통합된 가시성을 제공합니다 - 14일간 무료로 전체 액세스가 가능합니다.무료 평가판 시작

리소스 센터블로그

Active Directory 속성: Last Logon

Active Directory 속성: Last Logon

Nov 3, 2022

Active Directory 사용자 개체는 Active Directory 감사 보고 및 관리에 유용한 여러 로그온 메타데이터 속성을 보유합니다. 예를 들어, 상당 기간 동안 사용하지 않은 사용자 계정을 식별하거나 “stale” 계정으로 분류하는 데 흔히 사용됩니다.

하지만 각 로그온 메타데이터 속성에는 이해해야 할 고유한 동작 방식이 있습니다. 그렇지 않으면 조직은 최선의 경우 혼란스러운 보고서를, 최악의 경우 부정확하거나 오해를 불러일으킬 수 있는 보고서를 얻게 될 수 있습니다.

Last-Logon 속성에는 도메인 컨트롤러가 사용자를 성공적으로 인증한 마지막 시간에 대한 Windows FileTime 표현이 들어 있습니다. 이는 사용자 로그인 메타데이터의 가장 오래된(원조) 개념으로, Active Directory의 첫 버전부터 존재해 왔습니다.

아래 PowerShell 명령을 사용하면 도메인 컨트롤러에서 마지막 로그온 시간과 기타 사용자 속성을 가져올 수 있습니다.

      Get-ADUser -Filter * -Properties lastLogon | Select samaccountname, @{Name="lastLogon";Expression={[datetime]::FromFileTime($_.'lastLogon')}}
      

Last-Logon 속성은 도메인 컨트롤러가 로그온 요청을 성공적으로 처리할 때마다 업데이트되므로, 오래된 사용자 계정을 정확하게 식별하는 데 완벽한 방법을 제공하는 것처럼 보일 수 있습니다. 하지만 반드시 고려해야 하는 큰 주의 사항이 있습니다.

AD Last-Logon은 복제되는 속성이 아닙니다. 즉, 각 도메인 컨트롤러(DCs)는 특정 사용자에 대해 속성의 자체 버전을 유지합니다. 이러한 동작은 의도된 것으로, 네트워크의 도메인 컨트롤러 전반에서 이 속성을 동기화하기 위해 필요한 복제 트래픽 증가분은 특히 도입 당시(20년 전)에는 감당하기 어려웠을 것입니다. 하지만 이 동작 때문에, 이 속성을 사용하여 오래된 사용자 계정을 보고할 때는 주의가 필요합니다.

Last-Logon은 복제되지 않기 때문에(도메인 컨트롤러는 이 정보를 서로 교환하지 않습니다), 속성 값은 조회 중인 도메인 컨트롤러의 관점에서만 해석할 수 있습니다. 즉, 해당 속성의 값은 사용자가 마지막으로 로그인한 시간이 아닐 수도 있고, 대신 확인 중인 도메인 컨트롤러를 통해 사용자가 성공적으로 인증을 완료한 마지막 시간이 의미합니다. 마찬가지로, 속성 값이 0인 경우가 사용자가 결코 로그인하지 않았다는 뜻은 아닙니다. 값이 0을 반환한 도메인 컨트롤러가 해당 사용자로부터 로그인 요청을 처리한 적이 한 번도 없었을 수 있습니다.

요약하면, Last-Logon 속성은 로그인 관련 감사를 위해 사용할 수는 있지만, 정확한 보고를 위해서는 특정 사용자 계정에 대해 가장 최근에 업데이트된 값을 확인하기 위해 로그인 요청을 처리할 수 있는 모든 도메인 컨트롤러를 조회해야 합니다. 또는, 이 문서의 뒷부분에서 설명하는 것처럼 타사 보고 솔루션을 사용할 수도 있습니다.

Last-Logon-Timestamp

Last-Logon-Timestamp에는 사용자가 도메인에 로그인한 최근 시간에 대한 Windows FileTime 표현이 포함되어 있습니다. 이 사용자 속성은 Microsoft Windows Server 2003과 함께 도입되었습니다. 이전의 Last-Logon 속성과 달리 Last-Logon-Timestamp 속성은 복제되는 속성입니다. 즉, 특정 사용자에 대한 값이 모든 도메인 컨트롤러에 동기화됩니다. 이는 Last-Logon 속성에 비해 큰 개선입니다. 따라서 오래된(유효하지 않은) 사용자 계정을 식별하는 가장 좋은 방법은 Last-Logon-Timestamp를 사용하는 것 맞죠? 하지만 이 속성을 사용하는 데에는 자체 경고가 있습니다.

Last-Logon-Timestamp 속성의 함정은, 도메인 컨트롤러가 로그인 요청을 성공적으로 처리했다고 해서 항상 업데이트되는 것은 아니라는 점입니다. 대신 이 속성은 동적으로 업데이트되는 주기를 가지며, 그 주기는 ms-DS-Logon-Time-Sync-Interval 속성 값에 의해 제한됩니다. 해당 값은 기본값이 NOT SET이며, 14일로 처리됩니다. 이 속성이 변경되는 경우는 흔치 않지만, 확인하고 싶다면 다음 PowerShell 스크립트를 사용하면 실제 값을 쉽게 파악할 수 있습니다:

      $lastLogonReplicationInterval = (Get-ADDomain).LastLogonReplicationInterval
if( $lastLogonReplicationInterval )
{
    Write-Host "ms-DS-Logon-Time-Sync-Interval is set to $($lastLogonReplicationInterval) days"
}
else {
    Write-Host "ms-DS-Logon-Time-Sync-Interval is not set and will be treated as 14 days"
      

기본 14일 최대 업데이트 경계(maximum update boundary)를 사용하는 도메인에서는, 도메인 컨트롤러가 로그온 요청을 성공적으로 처리하고 해당 특성(attribute)의 마지막 업데이트 이후 경과 시간이 9일에서 14일 사이 어딘가보다 큰 경우에만 Last-Logon-Timestamp이 업데이트됩니다. 이 경과 시간의 변동 폭은 업데이트 빈도를 제어하는 로직에 포함된 임의의 백분율(random percentage)에서 비롯됩니다. 이러한 동작은 네트워크의 도메인 컨트롤러 전반에 걸쳐 이 특성이 동기화되도록 유지하는 데 필요한 복제 트래픽을 제한하는 것과, 비슷한 시점에 Last-Logon-Timestamp이 업데이트된 상당수 사용자에 대해 복제를 수행해야 할 가능성을 제한하는 것 사이의 절충을 반영합니다.

다음은 Last-Logon-Timestamp 특성의 업데이트 빈도를 제어하는 로직을 단순화한 예시입니다:

      (Current Datetime – Last-Logon-Timestamp) ? (ms-DS-Logon-Time-Sync-Interval – (Random % * 5 days))
      

실제로 Last-Logon-Timestamp 특성은 로그인과 관련된 감사 및 보고를 간단하게 해줍니다. 유일하게 중요한 잠재적 문제는 비활성 사용자 보고와 관련됩니다. 이 특성을 사용해 비활성 사용자를 식별할 때는, 복제가 의미 있는 업데이트를 전파할 수 있었는지 확인할 수 있을 만큼 충분한 시간만큼 도메인의 ms-DS-Logon-Time-Sync-Interval 값보다 오래되어야 staleness(낡음) 임계값을 설정할 수 있습니다.

LastLogonDate (PowerShell)

PowerShell에 익숙한 분이라면 LastLogonDate를 알아볼 수 있지만, Active Directory 어디에서도 찾을 수는 없습니다 글로벌 카탈로그 스키마. 이는 LastLogonDate가 실제로 로컬에서 계산되는 값이기 때문이며, 사용자 친화적인 형식으로 Last-Logon-Timestamp 특성의 복제된 값을 표시합니다. 예상대로 LastLogonDate는 Last-Logon-Timestamp 특성의 모든 장점과 모든 단점을 그대로 갖습니다. 다만 Windows DateTime에서의 변환이 필요하지 않으므로, 대부분의 사용자 로그인 관련 감사 보고에 가장 적합한 옵션입니다.

Active Directory 마지막 성공적 대화형 로그온 속성

ms-DS-Last-Successful-Interactive-Logon-Time 속성은 Windows Server 2008에서 도입되었지만, 기본값으로 비활성화되어 있어 많은 사람이 잘 알지 못합니다. 이 기능을 활성화하면 사용자의 마지막 성공적 대화형 로그온의 날짜와 시간이 포함됩니다. 매우 유용해 보이긴 하지만, 그대로 비활성화해야 하는 설득력 있는 이유가 몇 가지 있으며, 잠시 후 설명하겠습니다.

실습 환경이 있고 ms-DS-Last-Successful-Interactive-Logon-Time 속성으로 이것저것 시험해 보고 싶다면, 다음을 활성화할 수 있습니다. 컴퓨터 구성 ? 정책 ? 관리 템플릿 ? Windows 구성 요소 ? Windows 로그온 옵션 ? 사용자 로그온 시 이전 로그온에 대한 정보를 표시 GPO. 그런 다음 그룹 정책 업데이트. 재미로 운영 환경의 도메인에서는 이 설정을 활성화하지 마세요. 큰 곤란을 겪게 될 겁니다.

ms-DS-Last-Successful-Interactive-Logon-Time 속성의 첫 번째 문제는 값이 대화형 로그온이 인증될 때만 업데이트된다는 점입니다(“Ctrl-Alt-Del” 로그온을 떠올리면 됩니다). 즉, 네트워크 공유 로그인이나 LDAP 인증 같은 중요한 인증 활동은 업데이트를 트리거하지 않습니다. 따라서 이 속성을 사용해 로그온 관련 감사 보고서를 생성하면 일부 부정확한 결과가 나올 가능성이 큽니다. 예를 들어, 사용하지 않는(활동하지 않는) 사용자 계정을 식별하는 보고서에는 일반적으로 매우 활발하게 사용되는 도메인 서비스 계정이 목록에 포함될 수 있는데, 이들은 단지 비대화형 방식으로 활동하기 때문입니다. 요약하면, 이 속성은 오래된 사용자에 대한 보고를 정말 간단하고 신뢰할 수 있게 해주지만, 대화형 세션에 사용되는 사용자 계정에 대해서만 그렇습니다.

요약

감사 보고서에서 Active Directory log를 생성해야 한다면, 도메인 컨트롤러의 이벤트 로그를 집계한 뒤 이를 처리하는 것이 아마도 가장 좋은 방법일 것입니다. 이벤트 로그는 매우 잡음이 많지만, 동시에 매우 신뢰할 수 있으며 Active Directory가 제공할 수 없는 과거(이력) 정보를 제공합니다.

이것이 불가능하다면 LastLogonDate를 사용하세요. 또는 더 나은 방법으로는, Active Directory PowerShell 모듈에 포함된 Search-ADAccount cmdlet을 사용해 필요한 정보를 가져오고 CSV 파일로 출력합니다:

      Search-ADAccount -AccountInactive -DateTime ((Get-Date).AddDays(-30)) -UsersOnly | Select Name,LastLogonDate,DistinguishedName| Export-CSV c:psinactive_users.csv
      

Search-ADAccount cmdlet은 실제로는 내부적으로 LastLogonDate를 활용합니다. 비활동 기간의 기본값은 15일이며, 대부분의 환경에서는 문제가 없습니다. 위의 예시에는 비활동 기간을 30일 값으로 재정의하는 데 필요한 구문이 포함되어 있습니다. 보다 체계적인 접근을 선호하는 분들을 위해서는, 값을 변환하고 CSV 파일을 분석하지 않고도 이 정보를 가져올 수 있는 유용한 무료 도구로는 예를 들어 Netwrix Inactive User Tracker가 있습니다.

Netwrix가 어떻게 도와드릴 수 있나요?

Active Directory에서 각 사용자의 last logon date를 정기적으로 검토하면, 공격자가 침해하고 악용하고 싶어 할 오래된 계정을 도메인 관리자가 탐지하고 제거하는 데 도움이 됩니다. 하지만 이는 종합적인 사이버보안 전략의 일부일 뿐입니다.

Netwrix Active Directory Security Solution 는 모든 Active Directory 사용자 계정의 마지막 로그온 시간뿐만 아니라 Active Directory 내의 전체 활동에 대한 자세한 정보를 제공합니다. 포괄적인 사전 구축 보고서는 로그온 모니터링 을 간소화합니다. 특히 사용자 계정 – 마지막 로그온 시간 보고서에는 사용 설정 여부와 관계없이 모든 사용자 계정이 나열되며, 각 계정의 마지막 로그온 시간이 함께 표시됩니다. 보고서 구독 기능을 사용하면 IT 관리자는 지정한 일정에 따라 보고서를 이메일로 자동 전송받을 수 있어 모범 사례에 따라 정기적인 검토를 용이하게 하고, 시스템 취약점을 보다 효율적으로 제거할 수 있도록 지원합니다.

Netwrix Directory Manager

자동화된 그룹 관리로 AD를 간소화하고 보안을 강화하세요

자주 묻는 질문

Lastlogon과 lastLogonTimeStamp의 차이점은 무엇인가요?

Last-Logon 특성과 달리, Last-Logon-Timestamp 특성은 복제되는 특성입니다. 특정 사용자에 대한 해당 값은 모든 도메인 컨트롤러에 동기화됩니다.

lastLogonTimeStamp는 어떻게 계산되나요?

Last-Logon-Timestamp(또는 lastLogonTimeStamp)는 사용자의 로그인 시 DC가 등록하지만, 한 도메인 컨트롤러가 로그온 요청을 성공적으로 처리하더라도 이 특성이 모든 DC에서 항상 업데이트되는 것은 아닙니다.

대화형 인증이란 무엇인가요?

대화형 인증은 사용자가 장치에 로그인하기 위해 사용자 ID와 비밀번호를 입력하도록 요청받는 과정입니다. 대화형 로그인이 가장 흔히 발생하는 곳은 Windows 로그인 화면과 Windows 잠금 화면입니다.



공유하기

더 알아보기

저자 소개

Asset Not Found

Joe Dibley

보안 연구원

Netwrix의 보안 연구원이며 Netwrix Security Research Team의 일원입니다. Joe는 Active Directory, Windows 및 다양한 엔터프라이즈 소프트웨어 플랫폼과 기술 분야의 전문가로, 새로운 보안 위험, 복잡한 공격 기법, 그리고 이에 대한 대응(완화)과 탐지 방법을 연구합니다.