제어 흐름 무결성
Control-flow integrityControl-Flow Integrity(CFI; 제어 흐름 무결성)는 다양한 멀웨어 공격이 프로그램의 실행 흐름(제어 흐름)을 리디렉션하는 것을 방지하는 컴퓨터 보안 기술의 총칭입니다.
기술
관련 기술에는 CPS(코드 포인터 분리), CPI(코드 포인터 무결성), 스택 카나리, 섀도 스택 및 vtable 포인터 [1][2][3]검증이 포함됩니다.
실장
관련 실장은 Clang,[4] Microsoft의 Control[5][6][7] Flow Guard and Return Flow [8]Guard, Google의 간접 기능-콜[9] 체크 및 Reuse Attack Protector(RAP)[10][11]에서 이용할 수 있습니다.
Clang 및 Google Android
![]() | 이 섹션은 확장해야 합니다.추가해서 도움을 줄 수 있습니다. (2020년 9월) |
구글은 2018년부터 링크타임 최적화(LTO)와 CFI를 갖춘 클랭이 컴파일한 리눅스 커널을 안드로이드에 탑재했다.[12]
인텔 컨트롤 플로우 인포스먼트 테크놀로지
![]() | 이 섹션은 확장해야 합니다.추가해서 도와주시면 됩니다. (2021년 1월) |
인텔(R) Control-Flow Enforcement Technology(CET)는 섀도 스택(SS) 및 간접 분기 추적(IBT)[13][14]을 사용하여 흐름 무결성을 제어하기 위한 타협점을 검출합니다.
섀도 스택은 각 CALL의 리턴 주소 복사본을 특별히 보호된 섀도스택에 저장합니다.RET의 경우 프로세서는 일반 스택과 섀도 스택에 저장된 리턴 주소가 동일한지 여부를 확인합니다.주소가 동일하지 않은 경우 프로세서는 INT #21(Control Flow Protection Fault)을 생성합니다.
간접 브런치트래킹은, 부정한 타겟을 가지는 간접 JMP 또는 CALL 명령을 검출합니다.프로세서에 새로운 내부 스테이트 머신을 추가하는 것으로 실장됩니다.간접 JMP 및 CALL 명령의 동작이 변경되어 상태 머신이 IDLE에서 WAIT_FOR_ENDBRANCH로 바뀝니다.WAIT_FOR_ENDBRANCH 상태에서는 다음 실행 명령이 새로운 ENDBRANCH 명령(32비트 모드의 ENDBR32 또는 64비트 모드의 ENDBR64)이어야 합니다.이 명령어는 내부 상태 머신을 WAIT_FOR_ENDBRANCH에서 IDLE로 되돌립니다.따라서 간접 JMP 또는 CALL의 모든 인가된 타깃은 ENDBRANCH로 시작해야 합니다.프로세서가 WAIT_FOR_ENDBRANCH 상태(즉, 이전 명령이 간접 JMP 또는 CALL이었고 다음 명령이 ENDBRANCH 명령이 아닌 경우 프로세서는 INT #21(제어 흐름 보호)을 생성합니다.CET 간접 브랜치트래킹을 지원하지 않는 프로세서에서는 END BRANCH 명령이 NOP로 해석되어 효과가 없습니다.
Microsoft 컨트롤 플로우 가드
Control Flow Guard(CFG)는 2014년 11월에 Windows 8.1 Update 3(KB3000850)용으로 처음 출시되었습니다.개발자는 프로그램에 CFG를 추가할 수 있습니다./guard:cf
Visual Studio 2015 [15]이상에서 프로그램 링크 전 링커 플래그.
Windows 10 Creators Update(Windows 10 버전1703)에서는 Windows 커널은 CFG로 [16]컴파일되어 있습니다.Windows 커널은 Hyper-V를 사용하여 악의적인 커널 코드가 CFG [17]비트맵을 덮어쓰는 것을 방지합니다.
CFG 는, 프로세스 단위의 비트맵을 작성하는 것으로 동작합니다.설정 비트는 주소가 유효한 수신처임을 나타냅니다.각 간접 함수 호출을 수행하기 전에 응용 프로그램은 수신인 주소가 비트맵에 있는지 확인합니다.행선지 주소가 비트맵에 없는 경우는, 프로그램이 [15]종료합니다.이로 인해 공격자는 개체의 내용을 교체한 다음 간접 함수 호출을 사용하여 [18]페이로드를 실행함으로써 사후 사용을 악용하는 것이 더욱 어려워집니다.
구현 상세
보호되는 모든 간접 함수 호출의 경우 _guard_check_icall
함수가 호출되어 다음 [19]단계를 수행합니다.
- 대상 주소를 비트맵의 오프셋 및 비트 번호로 변환합니다.
- 상위 3바이트는 비트맵의 바이트 오프셋입니다.
- 비트 오프셋은 5비트 값입니다.첫 번째 4비트는 주소의 4~8번째 하위 비트입니다.
- 비트 오프셋의 5번째 비트는 수신처 주소가 0x10(마지막 4비트는 0)으로 정렬되면 0으로, 그렇지 않으면 1로 설정됩니다.
- 비트맵에서 대상 주소 값 검사
- 대상 주소가 비트맵에 있는 경우 오류 없이 반환하십시오.
- 대상 주소가 비트맵에 없는 경우 프로그램을 종료합니다.
바이패스 기술
CFG를 바이패스하는 일반적인 기술은 다음과 같습니다.
- 수신처를 [18][20]같은 프로세스로 로드된 비 CFG 모듈에 있는 코드로 설정합니다.
- CFG(CALL 또는 JMP)[18][20][21]에 의해 보호되지 않은 간접 콜을 검색합니다.
- 콜의 설계수가 다른 함수콜을 사용하여 스택의 정렬 불량과 함수가 반환된 후의 코드 실행을 [22]일으킵니다(Windows 10에서 패칭).
- 같은 수의 인수를 사용하여 함수 호출을 사용하지만 전달된 포인터 중 하나가 개체로 처리되어 포인터 기반 오프셋에 쓰이므로 반환 [23]주소를 덮어쓸 수 있습니다.
- 주소 검증에 CFG가 사용하는 함수 호출을 덮어씁니다([21]2015년 3월 패치)
- CFG 비트맵을 모두 1로 설정하여 모든 간접 함수[21] 호출을 허용합니다.
- 스택의 주소를 덮어쓰려면 controlled-write 프리미티브를 사용합니다(스택이 CFG에 의해 보호되지 않기 때문에).
Microsoft eXtended 플로우 가드
eXtended Flow Guard(XFG)는 아직 정식 출시되지 않았지만 윈도 인사이더 프리뷰에서 이용할 수 있으며 [24]2019년 블루햇 상하이에서 공개 발표됐다.
XFG는 함수 호출 시그니처를 검증함으로써 CFG를 확장하여 간접 함수 호출이 동일한 시그니처를 가진 함수의 서브셋에만 적용되도록 합니다.함수 호출 서명 검증은 간접 호출 직전에 대상 함수의 해시를 레지스터 r10에 격납하는 명령을 부가하고, 산출된 함수 해시를 대상 주소의 코드 직전의 메모리에 격납하는 것으로 실시한다.간접 호출이 이루어지면 XFG 유효성 검사 함수는 r10의 값을 대상 함수의 저장된 해시와 비교합니다.[25][26]
「 」를 참조해 주세요.
레퍼런스
- ^ Payer, Mathias; Kuznetsov, Volodymyr. "On differences between the CFI, CPS, and CPI properties". nebelwelt.net. Retrieved 2016-06-01.
- ^ "Adobe Flash Bug Discovery Leads To New Attack Mitigation Method". Dark Reading. 10 November 2015. Retrieved 2016-06-01.
- ^ Endgame. "Endgame to Present at Black Hat USA 2016". www.prnewswire.com. Retrieved 2016-06-01.
- ^ "Control Flow Integrity — Clang 3.9 documentation". clang.llvm.org. Retrieved 2016-06-01.
- ^ Pauli, Darren. "Microsoft's malware mitigator refreshed, but even Redmond says it's no longer needed". The Register. Retrieved 2016-06-01.
- ^ Mimoso, Michael (2015-09-22). "Bypass Developed for Microsoft Memory Protection, Control Flow Guard". Threatpost The first stop for security news. Retrieved 2016-06-01.
- ^ Smith, Ms. (23 September 2015). "DerbyCon: Former BlueHat prize winner will bypass Control Flow Guard in Windows 10". Network World. Retrieved 2016-06-01.
- ^ "Return Flow Guard". Tencent. Retrieved 2017-01-19.
- ^ Tice, Caroline; Roeder, Tom; Collingbourne, Peter; Checkoway, Stephen; Erlingsson, Úlfar; Lozano, Luis; Pike, Geoff (2014-01-01). Enforcing Forward-Edge Control-Flow Integrity in GCC & LLVM. pp. 941–955. ISBN 9781931971157.
- ^ Security, heise. "PaX Team stellt Schutz vor Code Reuse Exploits vor". Security (in German). Retrieved 2016-06-01.
- ^ "Frequently Asked Questions About RAP". Retrieved 2016-06-01.
- ^ "Clang LTO Patches Updated for the Linux Kernel - Phoronix".
- ^ "Control-flow Enforcement Technology Specification" (PDF). Intel Developer Zone. Retrieved 2021-01-05.[데드링크]
- ^ "R.I.P ROP: CET Internals in Windows 20H1". Winsider Seminars & Solutions Inc. Retrieved 2021-01-05.
- ^ a b "Control Flow Guard". MSDN. Retrieved 2017-01-19.
- ^ "Analysis of the Shadow Brokers release and mitigation with Windows 10 virtualization-based security". Microsoft Technet. 16 June 2017. Retrieved 2017-06-20.
- ^ "Universally Bypassing CFG Through Mutability Abuse" (PDF). Alex Ionescu's Blog. Retrieved 2017-07-07.
- ^ a b c Falcón, Francisco (2015-03-25). "Exploiting CVE-2015-0311, Part II: Bypassing Control Flow Guard on Windows 8.1 Update 3". Core Security. Retrieved 2017-01-19.
- ^ "Control Flow Guard" (PDF). Trend Micro. Retrieved 2017-01-19.
- ^ a b "Windows 10 Control Flow Guard Internals" (PDF). Power of Community. Retrieved 2017-01-19.
- ^ a b c d "Bypass Control Flow Guard Comprehensively" (PDF). BlackHat. Retrieved 2017-01-19.
- ^ "An interesting detail about Control Flow Guard". Bromium. Retrieved 2017-01-19.
- ^ Thomas, Sam (18 August 2016). "Object Oriented Exploitation: New techniques in Windows mitigation bypass". Slideshare. Retrieved 2017-01-19.
- ^ "Advancing Windows Security". Retrieved 2021-05-19.
- ^ "EXTENDED FLOW GUARD UNDER THE MICROSCOPE". Retrieved 2021-05-19.
- ^ "Exploit Development: Between a Rock and a (Xtended Flow) Guard Place: Examining XFG". 23 August 2020. Retrieved 2021-05-19.