forfiles란?
파일을 선택하고 명령을 실행하는 유틸리티입니다. 매개변수와 명령 구문을 통해 파일 실행, 조회, 삭제가 가능합니다.

forfiles의 Default 위치
C:\Windows\system32\forfiles.exe

forfiles 매개변수 1)

/P <pathname>
검색을 시작하는 경로 지정합니다. 기본적으로 현재 작업 디렉터리에서 시작 검색합니다.
/m <searchmask> 지정된 검색 마스크에 따라 파일을 검색합니다. 기본 검색 맵은 * 입니다. 이는 확장자를 의미합니다.
/s 하위 directories에서 재귀적으로 검색하도록 forfiles 명령에 지시합니다.
/c <command>
각 파일에 지정된 된 명령을 실행합니다. 명령 문자열은 큰따옴표로 묶어야 합니다. 기본 명령은 “cmd /c echo @file”입니다.
/d [{+\|-}][{<date> | <days>}] 지정된 시간 프레임 내에 마지막으로 수정된 날짜가 있는 파일을 선택합니다.
/? cmd 창에 도움말 텍스트를 표시합니다.

 

forfiles 변수설명

@FILE 파일 이름
@FNAME 확장명 없이 파일 이름
@EXT 파일 이름 확장명
@PATH 파일의 전체 경로
@RELPATH 파일의 상대 경로
@ISDIR
파일 형식을 디렉터리이면 TRUE로 평가, 그렇지 않으면 FALSE로 평가
@FSIZE 파일 크기 (바이트)
@FDATE 파일에 마지막으로 수정한 날짜 스탬프
@FTIME 파일의 마지막 수정된 타임 스탬프

 

예시 명령문
1. C:\inetpub\logs\LogFiles\W3SVC1의 경로에 있는 30일이 지난 .log 파일 삭제하기
forfiles /p C:\inetpub\logs\LogFiles\W3SVC1 /M *.log /D -30 /C “CMD /C del @file”

2. C 드라이브 경로에 디렉터리를 나열하기
forfiles /P c:\ /S /M * /C “cmd /c if @isdir==TRUE echo @file is a directory”

forfiles를 이용한 공격 기법
c:\windows\system32 폴더에 notepad.exe와 일치하는 항목이 있으므로 c:\folder\ 폴더에 normal.dll을 실행시킵니다. normal.dll 파일의 대체 데이터 스트림(ADS) 영역에 evil.exe이라는 변조된 악성파일을 실행시킬 수 있습니다.
※ 대체 데이터 스트림(ADS) 영역이란 윈도우 NTFS에서 데이터를 숨길 수 있는 영역입니다.

forfiles /p c:\windows\system32 /m notepad.exe /c #{process} 2)
forfiles /p c:\windows\system32 /m notepad.exe /c "c:\folder\normal.dll:evil.exe" 3), 4)
forfiles /p c:\windows\system32 /m calc.exe /c c:\tmp\pentestlab.exe 5)

forfiles를 이용한 공격 방안
- forfiles를 악용하는 공격을 Raw 데이터 로그에서 분석합니다.

[사진 1] forfiles를 사용하여 대체 데이터 스트림에 숨겨진 바이너리에서 새 프로세스 시작

실행되는 forfiles를 탐지하며, CommandLine에 유니크한 forfiles 명령어를 정규식판별, 정상, 비정상 프로세스 판단해주는 whiteText를 조건으로 만들어 판별해줍니다.
[사진 2] forfiles 조작 실행 필터 등록

[사진 3] forfiles 조작 실행 필터 탐지

– 공격자의 악의적인 행위를 탐지된 필터로 파악할 수 있습니다.

[참조]
1) 마이크로 소프트, https://docs.microsoft.com/ko-kr/windows-server/administration/windows-commands/forfiles

2) 깃 허브, https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1202/T1202.md#atomic-test-2—indirect-command-execution—forfilesexe

3) 마이터, https://attack.mitre.org/techniques/T1202/

4) 깃허브 블로그, https://lolbas-project.github.io/lolbas/Binaries/Forfiles/

5) news.knowledia, https://news.knowledia.com/US/en/articles/indirect-command-execution-64b33b0d54aa91071ab4b4c4aab6813e9808aaeb