Windows 보안 기본 사항 | 4가지 일반적인 자격 증명 유출 경로 차단

최근 발표한 Bloodhound를 사용한 NTLM 무차별 암호 대입 공격 알아보기라는 글에서는 아직도 NTLM 인증 프로토콜을 악용하는 공격자들의 공격 방법을 살펴보았습니다. 이 게시물에서는 SAM, LSA 시크릿, SYSKEY 및 LSASS에 대한 기본 공격 방법을 좀 더 일반적으로 설명하겠습니다. 보안 팀에서 이러한 방법을 모니터링하는 것이 중요하다는 점을 강조하기 위해, 공격자가 이를 통해 Windows 컴퓨터에서 자격 증명을 얻는 방법을 말씀드리겠습니다. 이렇게 잘 알려져 있고 비교적 간단한 자격 증명 도용 공격 방법이 여전히 현장에서 사용되고 있다는 것은 이 검증된 기술을 간과하는 보안 팀이 있음을 시사합니다.

LSASS를 통해 일반 텍스트 자격 증명을 찾거나 시크릿용 NTLM 또는 LSA 키의 SAM을 확보하는 것은 공격자에게 큰 가치가 있습니다. ‘킬체인’의 여러 단계에서 유효한 자격 증명을 마음껏 사용하여 훨씬 더 많은 일을 할 수 있는데, 공격자가 시스템에 대한 액세스 권한을 얻는 것만으로 만족할 이유는 없습니다.

결과적으로 공격자는 횡적 확산 중에 자격 증명 덤핑을 자주 사용합니다. 계정 로그인 이름과 암호를 얻은 공격자는 조직의 네트워크를 통해 더 멀리 침투할 수 있고, 제한된 데이터에 액세스할 수 있으며, 더 높은 권한으로 명령과 프로그램을 실행할 수 있습니다.

자격 증명의 유출 과정

잠재적 공격자는 대략적으로 다음과 같은 작업을 하려고 할 것입니다.

1. 오프라인 크랙과 조작을 위해 NTLM 해시를 얻습니다.

  • HKLM\SAM: 사용자 암호의 NTLMv2 해시 포함
  • HKLM\security: 캐시된 도메인 레코드 LSA 시크릿/LSA 키 포함
  • HKLM\system – 일명 SYSKEY: LSA 시크릿 및 SAM 데이터베이스 암호화에 사용할 수 있는 키 포함

2. LSASS를 덤프하여 일반 텍스트 암호를 가져오거나 NTLM 해시(대상 Windows 버전에 따라 다름)만 가져옵니다.

참고: 기능 및 저장된 정보는 다를 수 있습니다. 예를 들어 Active Directory 도메인에 속하는 컴퓨터와 그렇지 않은 컴퓨터 간에는 차이가 있습니다.

이제 위에서 언급한 다양한 구성 요소를 자세히 살펴보겠습니다.

1. SAM: HKLM\SAM

SAM(보안 계정 관리자) 데이터베이스는 Windows가 사용자 계정에 대한 정보를 저장하는 곳입니다. 사용자 이름 및 사용자 암호의 해시가 저장되어 있으며, 로그인을 시도하는 사용자를 인증하고 암호를 제공하는 데 사용됩니다.

해시 길이와 복잡성은 해당 암호의 암호화 알고리즘에 따라 다릅니다. 간단한 DES 기반 LM(LAN Manager) 암호화 알고리즘일 수도 있고, NTHash 알고리즘의 두 가지 버전인 NTLMv1과 NTLMv2 중 하나일 수도 있습니다. 둘 다 32개의 16진수를 출력하며 MD4 다이제스트에서 파생됩니다.

사용자 암호를 손에 넣는 가장 일반적인 방법 중 하나는 암호 해시를 추출할 수 있는 도구를 사용하거나 레지스트리를 [reg.exe save hklm\SAM] 파일에 직접 복사하고 저장된 사용자 계정 암호 해시를 추출하는 소프트웨어 유틸리티를 사용하여 오프라인에서 SAM 데이터베이스를 덤프하는 것입니다.

LM 또는 NTLM 해시가 확보되면 암호 해시에 대한 오프라인 무차별 암호 대입 공격이 가능합니다(이 게시물의 뒷부분에서 자세히 설명).

보안
SentinelOne의 연구 및 위협 인텔리전스 블로그인 SentinelLabs를 방문하세요.

2. LSA 시크릿: HKLM\Security

LSA 시크릿은 Windows에서 LSA(Local Security Authority)가 사용하는 스토리지입니다.

LSA의 목적은 시스템의 로컬 보안 정책을 관리하는 것이므로, 정의에 맞게 사용자 로그인, 사용자 인증 및 LSA 시크릿과 관련된 비공개 데이터를 저장합니다. LSA 시크릿 스토리지에 대한 액세스 권한은 SYSTEM 계정 프로세스에만 부여됩니다.

LSA는 다음과 같은 중요한 시스템 데이터를 저장합니다.

  • 사용자 암호
  • Internet Explorer 암호
  • 서비스 계정 암호(시크릿을 통한 인증이 필요한 서비스)
  • 캐시된 도메인 암호 암호화 키
  • SQL 암호
  • SYSTEM 계정 암호
  • 구성된 예약 작업을 위한 계정 암호
  • 비활성화된 Windows 사본이 만료될 때까지 남은 시간

이 밖에도 다양한 데이터가 저장됩니다. LSA 시크릿의 초기 버전은 금방 크랙이 나타났고, mimikatz 같은 도구로도 일부 Windows 버전의 메모리 및 레지스트리 하이브에서 LSA 시크릿을 덤프할 수 있습니다.

3. SYSKEY: HKLM\System

SAM 잠금 도구라고도 불리는 Syskey는 Windows 이전 버전에 존재했습니다. 이것은 SAM(보안 계정 관리자) 데이터베이스를 암호화하여 컴퓨터 부팅 중 SAM에 대한 추가 보호 계층을 제공하는 기능을 합니다.

Syskey는 운영 체제가 실행되고 있지 않을 때만 보안 데이터를 보호합니다. OS가 실행되면 Syskey 값이 메모리에 로드되어 나중에 SAM을 해독할 수 있게 됩니다. HKLM\SAM은 HKLM\SECURITY\SAM 아래의 SECURITY 하위 키에 연결됩니다.

Syskey 기능은 2017년부터 중단되었지만, 구성된 해당 Windows 버전이 켜져 있을 때는 hklm\system에서 찾을 수 있습니다.

4. LSASS로 자격 증명 덤프

Windows 8이 출시될 때까지는 Windows에서 mimikatz를 사용하면 LSASS(Local Security Authority Subsystem Service)에서 일반 텍스트 형식의 자격 증명을 얻을 수 있었습니다.

시간이 지나 몇 가지 수정 사항이 나왔는데, 모두 LSASS 사용을 강화하여 해시된 암호를 얻기 어렵게 만드는 방법이었습니다. Windows 10 Enterprise에서는 Credential Guard로 SYSTEM 권한이 있는 사용자로부터도 LSASS 프로세스를 격리할 수 있습니다.

Windows 7에서 Mimikatz 암호 추출:

Windows 10에서 이 도구를 실행하면 변경 사항을 확인할 수 있습니다. 일반 텍스트 암호는 보이지 않지만 NTLMv1 해시를 얻을 수 있습니다.

NTLMv2 해시에서 암호 추출

대상 컴퓨터에 대한 로컬 액세스 권한이 없는 경우에도 여러 가지 방법으로 NTLM 해시를 얻을 수 있습니다.

이때 사용되는 가장 인기 있는 도구 중 하나는 응답기 도구입니다.


다음은 응답기 도구로 출력할 수 있는 NTLMv2 해시의 예입니다.

admin::M57oDBrlht:08ca45b7d6da58ee:88dcbe4346168966a153a0064958dae6:5b6740315c7830310000000000000b45c67103d07d7b95acd12dea11230e0000000052920b85f78d013c31cdb3b92f5d765c783030

이 도구에는 많은 기능이 있지만, 해시 추출과 관련이 있는 것은 특정 네트워크 서비스가 요청될 때 사용자에게 자격 증명을 요구하는 기능입니다. 이로 인해 일반 텍스트 암호 또는 암호 해시가 생길 수 있습니다.

이 공격에서는 이 도구로 LLMNR 패킷을 캡처하고 챌린지/응답에서 해시를 추출합니다. 그러므로 네트워크에서 올바른 패킷을 수신하도록 도구를 설정한 다음, 피해자 컴퓨터에서 실제로 존재하지 않는 네트워크 리소스에 접근하려고 시도해 보았습니다. 이렇게 해서 트래픽을 캡처하고, 거기서 NTLM 해시를 얻을 수 있습니다.

제가 Windows 컴퓨터에서 “MadeUpNetworkShare”라는 이름의 존재하지 않는 공유 폴더에 액세스하려고 했더니, 이 도구는 동일한 네트워크의 컴퓨터에서 실행되면서 챌린지/응답을 기록했고 거기에서 NTLM 해시가 노출되었습니다.

암호 해시를 어떻게 사용할 수 있나요?

일단 해시가 확보되면 몇 가지 방법으로 일반 텍스트 암호를 추출할 수 있습니다.

사전 공격/무차별 암호 대입 공격 – 단어 목록을 사용하여 암호와 비교하는 방법입니다. John the Ripper, hashcat, Cain & Abel, Ophcrack 등 이러한 작업을 위한 일반적인 도구를 사용할 수 있습니다.

레인보우 테이블 공격 – 해시를 크랙할 때 더 적합한 방법이지만, 가능한 암호 및 미리 계산된 해시의 기존 데이터베이스가 있어야 합니다.

다음은 레인보우 테이블을 이용한 NTLMv1 암호 크랙의 예입니다(출처: https://crackstation.net/).

솔트 처리되지 않은 알려진 해시만 이 방법으로 암호로 되돌릴 수 있습니다.

암호 크랙이 너무 어려우면 해시 전달 공격 등 다른 방법을 선택하면 됩니다. 암호 자체가 아니라 암호의 해시를 사용하여 인증하고 네트워크에서 원하는 서비스를 활용하는 것도 여기에 포함됩니다. psexec 및 SMB를 통해 통신하는 각종 서비스가 좋은 예입니다.

자격 증명 유출 방지를 위한 권장 사항

자격 증명 덤프 및 유출을 방지하려면 네트워크의 구형 시스템 중 아직도 SAM 데이터베이스에 LM으로 암호화된 암호가 있는 시스템이 있는지 확인하고, 신형 시스템에서 LM(기본적으로 비활성화)이 활성화되지 않았음을 확인하는 것이 좋습니다. LM 암호는 제한된 문자 집합만 사용하므로 크랙되기 쉽습니다.

또한 NTLMv1을 사용하지 않도록 설정하는 것이 좋습니다. NTLMv1 해시에서는 암호를 추출하기가 비교적 쉽고, 달리 구성하지 않는 한 NTLMv1에서 작동하는 대부분의 서비스는 NTLMv2에서도 작동합니다.

LM과 NTLMv1 둘 다 비활성화하는 한 가지 방법은 GPO 페이지를 사용하는 것입니다.

NTLMv1의 사용을 방지하려면 GPO에서 다음 구성을 변경하세요.

암호가 길고 고유하면 NTLMv2 해시 크랙이 쉽지 않습니다. 또한 NTLM 해시로 인증하는 서비스가 없다면, 공격자가 해시를 손에 넣는다고 해도 별다른 이익이 없습니다.

NTLM 및 Kerberos 자격 증명을 추가로 보호하기 위해, Windows 10 컴퓨터에서 Credential Guard를 사용하도록 설정하는 것이 좋습니다(지원하는 경우).

공격 표면을 줄이고 자격 증명 유출을 방지하는 가장 효과적인 방법은 머신 러닝Active EDR을 사용하는 SentinelOne 같은 차세대 보안 솔루션을 배포하는 것입니다.

최종 고려 사항

네트워크 아키텍처 및 환경에서 사용되는 서비스에 주의를 기울임으로써 이러한 기본적인 공격을 예방할 수 있습니다. 특히 이런 종류의 공격은 EOL 상태임에도 불구하고 많은 엔터프라이즈 네트워크에서 여전히 널리 사용되는 Windows 7(이하)에서 가장 큰 효과를 발휘합니다. 오늘날 많은 조직에서는 그룹 도메인에서 Kerberos 등 보다 안전한 솔루션을 구현하여 여기에서 설명한 취약성을 정확히 방지하며, 신뢰할 수 있는 차세대 엔드포인트 보안 플랫폼을 배포하여 디바이스와 네트워크를 보호하고 있습니다.

MITRE ATT&CK 참고 자료

자격 증명 덤핑 – T1003
해시 전달 – T1075
무차별 암호 대입 공격 – T1110


Like this article? Follow us on LinkedIn, Twitter, YouTube or Facebook to see the content we post.

Read more about Cyber Security