개요
최근 Cybellum 에서는 대다수의 안티바이러스 제품에 적용되는 Zero-Day 취약점 "Double Agent" 를 발표. 해당 공격의 아래의 기능을 사용한 공격
* MS의 개발자 검증도구인 "Microsoft Application Verifier" 을 사용
* 본래 목적은 런타임 검증도구로 오류를 신속하게 감지 및 수정할 수 있는 용도로 사용
* Double Agent 공격의 경우 이를 통해 원하는 DLL 을 Injection
공격 가능 대상
* 모든 버전의 Windows (Windows XP to Windows 10)
* 모든 Windows architecture (x86 and x64)
* 모든 Windows 사용자 (SYSTEM/Admin/etc.)
* 모든 대상 프로세스 (OS/Anti-Virus/etc.)
코드 인젝션
* 원하는 DLL 을 어떠한 프로세스에도 인젝션 할 수 있게 함
* DLL 인젝션은 프로세스 실행 과정 중 빠른 순위로 이루어짐 (Kernel32.dll 이나 TLS 보다 먼저)
* 발표 시점 기준으로 대부분의 Anti-Virus 에도 공격이 가능
지속성
* 재부팅 뿐만 아니라 업데이트/패치/재설치 등에 대해서도 지속 가능한 공격 기법
* 해당 프로그램 재설치에 대해서도 지속 가능
공격 요소
* Anti-Virus 와 차세대 Anti-Virus 공격 : 모든 자체 보호 매커니즘을 우회하면서 코드를 인젝션하여 Anti-Virus 제어
* 지속형 악성코드 설치 : 악성코드가 살아남아 재부팅 시에도 자동으로 실행되도록 설치
* 권한 하이재킹 : 신뢰할 수 있는 프로세스의 권한을 하이재킹하여 신뢰할 수 있는 프로세스로 위장
* 프로세스 동작 조작 : 백도어 설치나 암호화 알고리즘 약화 등의 조작
* 다른 사용자/세션 공격 : 다른 사용자와 세션(SYSTEM/Admin/etc.) 프로세스에 코드를 인젝션
대상 지정
해당 공격은 지정된 FULL 경로에 해당하는 프로그램이 아닌, 프로그램의 이름만으로 대상을 공격 가능
* 대상 이름을 cmd.exe 로 해놓은 경우 C\cmd.exe 와 C;\Windows\System32\cmd.exe 둘 다 실행 시 인젝션이 진행
* 대상 이름의 프로세스가 실행 될 때마다 매번 인젝션이 진행
코드
아래와 같이 레지스트리를 등록해야 함
RegSetKeyValueW(hIfeoKey, pcwszProcessName, VERIFIER_VERIFIERDLLS_VALUE_NAME, REG_SZ, pcwszVrfDllName, dwVrfDllNameLenInBytes)); RegSetKeyValueW(hIfeoKey, pcwszProcessName, VERIFIER_GLOBALFLAG_VALUE_NAME, REG_DWORD, &dwGlobalFlag, sizeof(dwGlobalFlag))); |
이때, 인젝션하고자 하는 DLL 이 다음의 경로에 위치 해야 함
C:\Windows\System32\[인젝션 할 DLL명].dll |
레지스트리 경로와 값은 아래와 같다.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\ProcessName VerifierDlls : Target.dll , GlobalFlag : 0x100 |
공격
공격을 하기 위해 제작한 프로그램의 코드는 아래와 같다. 이때 Inject.dll 은 System32 에 존재해야 한다.
|
위 코드를 제작한 프로그램을 실행 후 대상 프로세스인 cmd.exe 를 실행하였다. 실행 결과 Inject.dll 이 인젝션 된 것을 확인할 수 있다. 한가지 자세히 볼 점은 notepad.exe (메모장) 의 이름도 cmd.exe 로 변경한 결과, 인젝션이 이루어진 것을 확인 할 수 있다. 이는 위에서 언급한바와 같이 대상 프로세스의 전체 경로가 아닌 프로세스 이름만 확인 후 공격이 이루어지기 때문이다.
참고자료
원본 자료에는 Anti-Virus 의 레지스트리 설정 보호 우회에 대해서도 나와있다. 궁금하면 해당 자료를 읽어보는 것을 추천한다.
* POC 코드 : https://github.com/Cybellum/DoubleAgent
* 원문 블로그 : https://cybellum.com/doubleagent-taking-full-control-antivirus/
* 상세 내용 : https://cybellum.com/doubleagentzero-day-code-injection-and-persistence-technique/
* 기타 참조 : http://kitrap08.blogspot.kr/2011/04/application-verifier.html
'Reversing > Theory' 카테고리의 다른 글
Dynamic Data Exchange (DDE) (0) | 2017.11.12 |
---|---|
Atombombing 기법 (0) | 2017.05.28 |
암호학 기초 개념 (2) | 2016.11.23 |
Memory Detection(메모리 진단) (0) | 2016.09.26 |
Assembly로 보는 코드, strcmp 문자열 비교 (0) | 2016.08.08 |