## 개요 ADS는 Alternative Data Stream의 약어로 NTFS 파일시스템에서 $DATA 속성이 두개 이상 존재하는 MFT Entry를 지칭하는 말이다. ADS의 도입 배경은 Windows NT환경에서 macOS 파일시스템인 HFS+(Hierarchical File System)와의 호환성을 유지하기 위해 추가된 기능으로, macOS를 지원하는 파일시스템에서도 유사한 기능이 있다는 것을 유추할 수 있다. 다양한 방면으로 활용도가 높고, 디지털 포렌식 CTF에서도 종종 등장하는 문제 유형으로 흔히 말해 모르면 접근조차 못하는 문제 유형이라고 볼 수 있다. 앞서 설명했듯, ADS는 두개의 데이터 스트림을 가지게 된다. 정상적인 파일이라면 하나의 데이터 스트림($DATA 속성)을 갖는 것이 일반적이다. 두개의 데이터 스트림을 가지게 된다면 어떻게 될까? 여러 방면으로 생각해볼 수 있겠지만, 정답은 두개의 파일 내용이 하나의 파일인 척 한다는 것이다. 아직 무슨말인지 잘 이해가 가지 않을것이다. 어떤 정보가 저장될 수 있는지, 어떤 방식으로 저장되며, 일반 파일과는 어떤 차이점이 있는지 알아보도록 하자. > [!HFS에 ADS가 있다구요?] > 정확하게 이야기하면 HFS는 ADS를 지원하지 않는다. HFS+도 동일하게 지원하지 않는다. 그렇다면 왜 HFS+와의 호환성을 위해 ADS를 도입한 것이라 말한걸까? > > 이유는 바로 NTFS를 HFS+의 “resource forks”라는 기능에 호환되도록 ADS라는 기능을 도입한 것이기 때문이다. resource fork는 파일의 메인 데이터와 메타데이터를 따로 저장하는 기술로, 주로 MacOS의 아이콘, 파일 comment, 사용자 속성등을 저장할 수 있다. > > 이와 관련된 기능은 의 HFS 단원에서 자세히 다루도록 하겠다. ## What is ADS? 먼저 도입 시기부터 알아보자. ADS는 Windows NT 3.1 버전부터 도입된 기능으로 태그나 키워드같은 추가적인 메타데이터를 파일에 저장하여 빠른 인덱싱을 가능하게 하는 것을 주 목적으로 도입되었다. NTFS 내의 일반적인 파일의 경우 첫번째 $DATA 속성이 기존 파일이며, 두번째 $DATA 속성이 두번째 파일이 된다. 이는 파일을 열었을 때 나타나는 파일 내부 컨텐츠는 첫번째 $DATA 속성이라는 뜻이다. 그렇다면 두번째 $DATA 속성은 어떻게 봐야 할까? 일반적인 더블클릭으로는 파일을 열람할 수 없다. Command Line을 이용하여 파일을 추출하거나, Sysinternals의 도구를 이용해야 한다. 이러한 특성때문에 ADS에는 정보/파일을 은닉하는데 종종 사용되었다. 여기서 눈치챘을수도 있겠지만 실행 코드가 임의의 파일에 삽입될 수 있다는 것은 악성코드로써 작동할 가능성이 농후하다. 이와 관련해서는 UAC(User Access Control)나 Windows Defender와 같은 프로그램에서 탐지하게 되니 참고하도록 하자. 백날 말로 해봤자 이게 무슨 기능인지 와닿지 않을거다. 직접 보면서 이해해보도록 하자. ![[MFTENTRY-ads.png]] 위 사진을 보면 첫번째 $DATA 속성 다음에 추가적으로 2개의 $DATA 속성이 등장하는 것을 볼 수 있다. 빨간색이 첫번째 $DATA 속성이고, 노란색이 2번째, 3번째 $DATA 속성이다. ADS는 갯수가 2개로 제한된 속성이 아니라, 여러개가 붙을 수 있다. 이론적으로는 무한정이나, MFT Entry가 커지면 어떻게 되는지 복습해보자! (이게 뭔 소린지 모르겠다면 [[MFT Attribute (1)]], [[MFT Attribute (2)]] 를 정독하고 오자) ### ADS 생성 방법 어떻게 하면 ADS를 추가할 수 있을지에 대해서 알아보자. 개요에서 간략하게 소개했지만 ADS를 열람하기 위해서는 Command Line 도구를 이용하거나, Systinternals 도구를 활용할 수 있다. 반대로 생각하면 생성 역시 이와 같은 도구들을 이용할 수 있다는 것이다. 그중 오늘은 Command Line 도구중 하나인 `cmd.exe`를 이용해 보도록 하겠다. test.txt 라는 샘플 파일을 생성한 다음 파일 이름뒤에 `:` 구분자를 이용해 ADS를 추가할 수 있다. 말로는 이해가 잘 안되니 예시를 참고하자. ``` test.txt:thisisads //이런 형식이다. 내용을 쓰고 싶다면 echo "this is my first ads file!" > test.txt:ads1 echo "this is my second ads file!" > test.txt:ads2 ``` 보여준 예시에서는 문자열을 ADS로 첨부했지만 `>`를 이용하여 파일이나 이미지도 첨부할 수 있다. 다만 열람에 있어서도 제한적이다. ADS 파일이 추가된 파일의 정보를 확인하기 위해서는 `dir` 명령어의 `/r` 옵션을 사용해야 한다. ``` dir /r ``` 명령어의 결과는 아래 사진과 같다. ![[Dirads.png]] dir /r 실행 결과 ## 실습 & 샘플 ### 파일시스템 간 ADS 복사 실습 ADS 기능은 오직 NTFS 파일시스템에서만 지원한다. 따라서 다른 유형의 파일시스템으로 복사하는 경우, 예외 처리 메시지를 확인할 수 있다. ![[Fat.png]] NTFS → FAT32 파일 복사 시도 ![[Exfat.png]] **NTFS → exFAT 파일 복사 시도** 이런 예외 메시지를 무시하고 복사를 하게 된다면, ADS 속성이 삭제된다. ADS속성을 가지고 있는 `test.txt` 파일을 ext4 파일시스템을 사용하는 리눅스 기기에 복사한 다음, 다시 원래 위치의 NTFS 파일시스템으로 복사했을 때 ADS 속성이 삭제된 것을 확인할 수 있다. (파일 이름은 testlin.txt)로 변경했다.) ![[ADSFILE-copy.png]] ### ADS Sample : Zone.Identifier 가장 흔하게 사용되는 ADS가 추가된 파일은 Zone.Identifier 파일이다. Zone.Identifier 파일은 파일의 이동 경로를 추적할 수 있는 ADS로써 인터넷으로부터 다운로드 된 파일이 어떤 경로에서 유입되었는지 확인할 수 있는 “아티팩트”이다. **Zone 정보** |Zone ID|Source|Description| |---|---|---| |1|Local Intranet|지역망(인트라넷)을 통해 유입된 컨텐츠| |2|TRUSTED site|인터넷의 신뢰할 수 있는 사이트에서 유입된 컨텐츠| |3|Internet|인터넷을 통해 유입된 컨텐츠| |4|Restricted Site|신뢰할 수 없는 사이트에서 유입된 컨텐츠| **Sample** 원본 이미지 (https://pixabay.com/photos/seagull-bird-water-bird-plumage-5969760/) |Browser|Zone ID|ReferrerUrl|HostUrl| |---|---|---|---| |Edge|O|O|O| |Chrome|O|O|O| |Firefox|O|O|O| |IE 11|O|X|X| |Opera|O|O|O| |Whale|O|O|O| ![[CMD-dir.png]] ![[%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA_2023-05-07_%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE_10.43.36.png]] 브라우저 마다 저장하는 정보가 다르다. 대부분의 브라우저는 다운로드 받은 웹 url의 경로를 비롯한 정보를 포함하고 있는 반면, Internet Explorer 11 의 경우 ZoneID만을 포함하고 있었다. 분석하는데 있어서 IE11의 원본 URL이 없다고 해서 오류라고 생각하는 일은 없었으면 좋겠다. ### ADS Sample : (Malicious Code Execution) > [!Warning] To Be Done! > 조사한 바에 따르면 실행 파일을 임베드할 수 있었지만 > 실제 테스트한 결과 상위 윈도우 버전에서는 실행 파일 자체가 URL 처럼 인식되는 문제가 있었다. > > 정확한 경위를 파악하여 설명을 추가할 예정이다. > ## 결론 데이터를 숨기거나, 파일의 유입 경로를 파악할 수 있는 아티팩트이다. $DATA 속성으로부터 유래되는 하나의 정의라고 설명하는 것이 더 정확하다고 생각하지만, 이를 통해 확인할 수 있는 데이터 값들이 유의미하게 해석될 수 있기 때문에 아티팩트 단원에서 다루었다. 깊게 들어가면 악성코드 실행과도 연관될 수 있는 아티팩트이며 스테가노그래피와 같은 정보 은닉에도 사용될 수 있기 때문에 숨겨진 정보와 관련된 내용을 접했을 때 한번쯤은 떠올릴 수 있는 요소가 되었으면 좋겠다.