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

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

ADS

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

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

FAT32 에서는 제공되지 않았지만 NTFS 부터 ADS가 윈도우에서도 실행될 수 있도록 제공되었습니다. 그 이유는 맥킨토시에서 사용하는 파일시스템과 호환성 유지를 위해 ADS 기능을 제공한 것입니다. macOS에서는 data 영역과 resource 영역을 분리하여 사용하였고 ADS에서도 유사한 형태로 스트림 데이터를 작성할 수 있도록 구성되었습니다.

Hidden data in ADS

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

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

… 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). …

Start

아래와 같이 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

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

CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9 등

또한 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 실행)

Conclusion

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