엄선한 관련 콘텐츠:
기본 데이터 스트림과 대체 데이터 스트림
파일 스트림은 키워드나 파일을 만든 사용자의 신원과 같은, 파일에 대한 데이터를 포함하는 바이트의 연속입니다. 데이터 스트림을 “파일 안의 파일”이라고 생각해 보세요. 즉, 정상적인 파일 안에 존재하는 숨겨진 파일입니다. 각 스트림은 자신만의 디스크 공간 할당, 자신만의 실제 크기(사용 중인 바이트 수), 그리고 자신만의 파일 잠금(락)을 가집니다.
NTFS 파일 구조의 모든 파일에는 적어도 하나의 스트림, 즉 기본 스트림이 있습니다. 기본 데이터 스트림(default data stream) 은 일반적으로 보고(열람)할 수 있는 파일 콘텐츠입니다. 예를 들어 .txt 파일의 텍스트나 .exe 파일의 실행 코드가 여기에 해당합니다. 이 정보는 $Data 특성(attribute)에 저장됩니다. 이 기본 특성의 이름은 비어 있음(“”로 설정됨) 때문에, 기본 데이터 스트림은 종종 “이름 없는 데이터 스트림(unnamed data stream)”으로도 불립니다.
파일에는 하나 이상 대체 데이터 스트림(alternate data streams) (ADSs) 이 포함될 수도 있습니다. ADS는 반드시 이름이 있어야 합니다. 또한 대체 데이터 스트림을 추가해도 기본 데이터 스트림은 변경되지 않는다는 점에 유의하세요.
대체 데이터 스트림을 만드는 방법
파일에 대한 대체 데이터 스트림(Alternate Data Streams)을 만드는 것은 꽤 쉽습니다. 파일 이름이나 경로 끝에 콜론(“:”)을 추가한 다음 스트림 이름을 붙이기만 하면 됩니다. 콜론은 파일 이름에 사용할 수 없는 예약 문자이므로, 기존 파일 이름과 충돌하지 않습니다.
파일에 여러 ADS를 추가할 수 있습니다. 예를 들어, 텍스트 파일에 대해 두 개의 대체 데이터 스트림을 만드는 방법은 다음과 같습니다:
Myfile.txt:stream2
Myfile.txt:secretstuff
NTFS 파일 스트림의 이점
FAT16 및 FAT32 같은 기존 Windows 파일 시스템에는 여러 데이터 스트림에 대한 지원이 없지만, ADS는 새로운 기술이 아닙니다. ADS는 Windows NT 이후 Microsoft의 NTFS 파일 시스템 모든 버전에 이미 포함되어 있었습니다.
초기에는 여러 데이터 스트림을 활용함으로써 Windows 서버가 Apple Macintosh 컴퓨터용 파일 서버 역할도 할 수 있도록 하는 데 도움이 되었습니다. Mac 파일은 파일당 두 개의 스트림을 사용합니다. 하나는 데이터용이고, 다른 하나는 리소스 정보용입니다. NTFS가 여러 스트림을 지원하므로 Mac 사용자는 리소스 스트림을 잃지 않고 Windows 서버로 파일을 복사한 뒤 다시 Mac으로 복사해 올 수 있었습니다. 다시 말해, ADS는 두 시스템과 그 애플리케이션 간의 호환성을 제공할 수 있었습니다.
Windows에서 대체 데이터 스트림(Alternate Data Streams)을 활용하는 데에는 정당한 이유도 있습니다. 예를 들어 일부 아카이브 관리 및 백업 소프트웨어는 ADS를 사용해 파일 개정(버전) 정보를 저장하고, 많은 웹 브라우저는 인터넷에서 다운로드한 파일에 스트림을 추가하여 해당 파일이 어디에서 왔는지에 대한 보안 정보를 포함하기도 합니다.
ADS의 어두운(악의적인) 측면
ADS에는 많은 정당한 목적이 있지만, 해커는 악성코드 공격과 같은 악의적인 목적에 이를 악용할 수 있습니다. 밀수업자가 검사관으로부터 밀수품을 숨기기 위해 사용하는 여행가방 내부의 비밀 칸처럼, ADS는 위협 행위자가 악성 코드를 숨기고 기본적인 보안 탐지를 피해 향후 공격을 실행하는 데 사용할 수 있습니다. ADS는 오디오, 비디오, 이미지 등 어떤 유형의 파일이든 저장할 수 있으며, 바이러스·트로이목마·랜섬웨어 같은 악성 코드도 저장할 수 있습니다. 그리고 대체 데이터 스트림은 숨겨져 있으므로, 사용자는 디렉터리 목록 명령을 사용해 이를 감지할 수 없습니다.
NTFS 스트림을 작업하기 위한 도구
ADS에 대한 가시성을 높이기 위해 사용할 수 있는 몇 가지 기본 제공 도구가 있습니다. 여기에는 다음이 포함됩니다:
- Echo 및 그 이상
- Sysinternals Streams 유틸리티
- Dir 명령의 /R 옵션.
- ADS용 콘텐츠를 직접 조작할 수 있는 6개의 cmdlet을 포함하는 PowerShell 3.0
Echo 및 More
먼저 Echo와 More를 사용해 보겠습니다. 아래 예에서는 Echo 명령을 사용해 test.txt라는 텍스트 파일에 “:secret”을 덧붙이고, More 명령을 사용해 기본적으로는 볼 수 없는 비밀 메시지를 기록합니다. 또한 Dir 명령 역시 비밀 NTFS 스트림을 보지 못한다는 점에 주의하세요.
스트림
Streams는 Sysinternals에서 제공되는 명령줄 도구입니다. 폴더 내에서 기본 데이터 스트림 외에 추가 스트림을 사용하는 파일이 무엇인지 확인하는 데 사용합니다. 아래 스크린샷에서는 test.txt 파일에 파일 크기가 86바이트인 “secret”이라는 대체 스트림이 있음을 보여줍니다. 이는 앞의 예에서 Dir 명령이 표시한 26바이트보다 훨씬 많다는 점에 주의하세요.
Dir /R
Dir /R 옵션은 Windows Server 2003부터 사용할 수 있습니다. 아래와 같이 Dir /R 옵션을 사용하면 파일 ‘test.txt’가 두 번 표시됩니다. 또한 기본 파일 스트림과 비밀 파일 스트림 모두에 대해 올바른 파일 크기를 보여줍니다.
PowerShell
PowerShell을 사용하여 파일에 있는 대체 데이터 스트림을 식별할 수도 있습니다. 아래 예에서는 Stream 옵션과 와일드카드 매개변수를 사용하여 Get-Item 명령을 실행했습니다. 출력에는 파일의 두 스트림이 모두 표시되며, 화살표가 대체 스트림 보기(Alternate stream view)를 강조 표시합니다.
PowerShell을 사용하여 NTFS 스트림을 지울 수도 있습니다. 아래 스크린샷에서는 clear-content 명령을 사용해 비밀 데이터 스트림과 연결된 데이터를 삭제했습니다. 그 직후에 get-item 명령을 실행하면 파일 크기가 현재 0이므로, 스트림에 있던 데이터가 삭제되었음이 확인됩니다.
더 나아가 아래와 같이 remove-item 명령을 사용하면 스트림을 완전히 삭제할 수도 있습니다. get-item 명령은 해당 스트림이 삭제되었음을 확인해 줍니다.
ADS 위협에 대응하는 방법
공격자는 실제로 ADS를 사용하여 계층형 파일 구조 안에 랜섬웨어와 기타 악성코드를 포함한 악성 콘텐츠를 숨길 수 있습니다. 안타깝게도 Windows 파일 탐색기, Dir 명령 및 관련 도구들은 파일의 기본 데이터 스트림에 대한 정보만 보고합니다. 하지만 실제로는, 데이터 1k를 표시하는 간단한 .txt 파일이나 Word 문서 안에 ADS를 통해 수 메가바이트 규모의 숨겨진 데이터 또는 실행 가능한 코드가 포함될 수 있습니다.
따라서 보안 관리 전략을 수립할 때 ADS에 대한 가시성을 높여야 합니다. 특히 대체 데이터 스트림의 존재를 탐지하고, 승인되지 않은 콘텐츠를 검사하여 사전에 제거할 수 있는 백신 제품, 데이터 검색 도구, 데이터 유출 탐지기를 도입하는 것을 고려해 보세요. 결국 사고 예방이 사고 대응보다 항상 더 좋습니다.
NTFS 권한 관리 모범 사례
자세히 알아보기공유하기
더 알아보기
저자 소개
Joe Dibley
보안 연구원
Netwrix의 보안 연구원이며 Netwrix Security Research Team의 일원입니다. Joe는 Active Directory, Windows 및 다양한 엔터프라이즈 소프트웨어 플랫폼과 기술 분야의 전문가로, 새로운 보안 위험, 복잡한 공격 기법, 그리고 이에 대한 대응(완화)과 탐지 방법을 연구합니다.