NTFS File System 의 숨겨진 영역 ADS(Alternate Data Stream)

요즘 포렌식, 윈도우즈 시스템에 관심이 생겼습니다. 거의 리눅스만 사용하기 때문에 윈도우즈 시스템의 재미있는 부분에 대해서 많이 모르고 있었더군요. 그 중 오늘은 ADS(Alternate Data Stream) 영역에 관련된 이야기를 할까 합니다.

(border=undefined) 컴퓨터에서 파일이나 자료를 보관하는 조직 체제를 파일시스템이라고 하는데요. 이 중 많이 쓰이는 파일시스템인 NTFS는 윈도우즈 NT 계열에서 사용되는 파일시스템입니다. 이 NTFS에는 데이터를 숨길 수 있는 ADS 영역이 존재합니다.

ADS는 Alternate Data Stream 이며 다른 데이터 스트림을 생성할 수 있는 것, 대체 데이터 스트림이라고 보시면 됩니다.

FAT32 에서는 제공되지 않았지만 NTFS 부터 ADS가 윈도우에서도 실행될 수 있도록 제공되었습니다. 그 이유는 맥킨토시에서 사용하는 파일시스템과 호환성 유지를 위해 ADS 기능을 제공한 것입니다.

맥킨토시에서는 data 영역과 resource 영역을 분리하여 사용하였고 ADS에서도 유사한 형태로 스트림 데이터를 작성할 수 있도록 구성되었습니다.

NTFS 파일 시스템에서는 ADS 영역에 데이터를 작성하여 은닉할 수 있습니다. 파일을 생성하거나 사용할 때 콜론을 이용하여 쉽게 ADS에 데이터 작성이 가능합니다.

OWASP에서 작성된 ADS에 관한 글을 보면 콜론을 통해 데이터를 숨길 수 있고 공격자가 숨겨진 데이터를 활용할 수 있다고 합니다.

The NTFS file system includes support for alternate data streams. This is not a well known feature and was included, primarily, to provide compatibility with files in the Macintosh file system. Alternate data streams allow files to contain more than one stream of data. Every file has at least one data stream. In Windows, this default data stream is called :$DATA. Windows Explorer doesn’t provide a way of seing what alternate data streams are in a file (or a way to remove them without deleting the file) but they can be created and accessed easily. Because they are difficult to find they are often used by hackers to hide files on machines that they’ve compromised (perhaps files for a rootkit). Executables in alternate data streams can be executed from the command line but they will not show up in Windows Explorer (or the Console). Reference Example 1 for information on creating and accessing alternate data streams. Since the :$DATA alternate stream exists for every file it can be an alternate way to access any file. Reference Example 2 for information on accessing the :$DATA alternate data stream in a text file. Any application that creates files or looks at or depends on the end of the file name (or the extension) should be aware of the possibility of these alternate data streams. If unsanitized user input is used to create or reference a file name an attacker could use the :$DATA stream to change the behavior of the software. A well-known vulnerability of this nature existed in older versions of IIS. When IIS saw a request for a file with an ASP extension it sent the ASP file to the application associated with the extension. This application would run the server-side code in the ASP file and generate the HTML response for the request. Due to a flaw in the extension parsing of these versions of IIS, filename.asp::$DATA did not match the extension and since there was no application registered for the asp::$DATA extension, the asp source code was returned to the attacker. Proper user input sanitation is the best defense against this type of attack. souce link: https://www.owasp.org/index.php/Windows_::DATA_alternate_data_stream

아래와 같이 README.txt에 codeblack이라는 데이터를 ADS 영역에 숨겨보겠습니다. README.txt에는 그림과 같이 README File 과 간단한 글이 작성되어 있습니다.

아래와 같이 codeblack 이란 단어를 README.txt 의 codeblack 스트림에 넣습니다.

echo “codeblack” » README.txt:codeblack

“codeblack” 이란 문자열은 README.txt 의 codeblack 스트림 영역에 작성되어 있습니다. README.txt 를 notepad.exe 로 열거나 more 등을 통해 확인하여도 “codeblack"이라는 데이터는 확인되지 않습니다.

ADS영역에 codeblack이라는 데이터를 넣었지만 기존 데이터나, 크기에 대해서는 변화가 없습니다.

자 이제 ADS 영역에 숨겨놓은 데이터를 호출하겠습니다. codeblack이라는 스트림으로 넣었기 때문에 호출 시 동일하게 불러줘야 합니다.

아래 more 명령으로 확인해보겠습니다.

#more < README.txt:codeblack

위와 같이 숨겨놓은 데이터 확인이 가능합니다.

파일 이외에도 디렉토리 ADS 영역에도 데이터 삽입이 가능하다. (# echo “test” » :dirstream)

공격자는 시스템 예약어를 이용하여 탐지 당할 확률을 줄일 수 있습니다.


또한 ADS 영역에 exe 파일 자체를 밀어 넣어 실행 또한 가능합니다.

C:\> type C:\windows\system32\notepad.exe > c:\windows\system32\calc.exe:notepad.exe
C:\> start c:\windows\system32\calc.exe:notepad.exe (#notepad.exe 실행)

간단하게 ADS 영역에 대해 알아보고 데이터의 삽입/호출에 대해 알아봤습니다. ADS를 통해 데이터를 은닉하고, Windows 서버에서 데이터를 웹 데이터를 숨기고 가져올 수도 있습니다. 참 재미있는 부분인 것 같습니다. 궁금한점이 있으시면 문의주세요.

(구글링이 제일 좋습니다..)

감사합니다 :)

Licensed under CC BY-NC-SA 4.0
Last updated on Jul 10, 2021 01:05 +0900