시그리턴 지향 프로그래밍

Sigreturn-oriented programming

SROP(Sigreturn-Oriented Programming)는 컴퓨터 보안 악용 기술로, 공격자가 실행 불가능한 메모리나 [1]코드 서명 등의 보안 수단을 사용하여 코드를 실행할 수 있도록 합니다.2014년 제35회 IEEE 보안 및 사생활 심포지엄에서 처음으로 발표되었으며, 최우수 학생 논문상[2]수상하였습니다.이 기술은 ROP(Return-Oriented Programming) 기술의 배후에 동일한 기본 전제조건을 채택하고 있습니다.를 들어 스택버퍼 오버플로우를 통해 콜스택을 제어하는 공격자는 가젯이라고 불리는 단순한 명령 시퀀스를 통해 프로그램의 제어 흐름에 영향을 줄 수 있습니다.공격은 콜 스택에서 위조된 시그널콘텍스트 구조를[3] 푸시하여 원래 리턴 주소를 공격자가 시그널[4] 리턴 시스템콜[5]호출할 수 있는 가젯의 위치로 덮어씁니다.대부분의 경우 이 공격을 성공적으로 실행하기 위해 하나의 가젯만 있으면 됩니다.이 가젯은 고정된 장소에 배치되어 있을 수 있으며, 이 공격을 단순하고 효과적으로 할 수 있습니다.일반적인 리턴 지향 프로그래밍 [1]기술에 필요한 설정보다 일반적으로 간단하고 휴대성이 뛰어납니다.

Sigreturn 지향 프로그래밍은 프로그램의 [1]원래 사양에서 벗어난 코드 실행을 허용하기 때문에 이상한 기계로 여겨질 수 있습니다.

배경

SROP(Sigreturn Oriented Programming)는 원래 제어 흐름의 범위 밖에서 코드를 실행하기 위해 코드 재사용을 사용하기 때문에 ROP(Return Oriented Programming)와 유사한 기술입니다.따라서 상대방은 보통 스택버퍼 오버플로를 통해 스택스매싱 공격을 실행하여 콜스택 내에 포함된 리턴 주소를 덮어쓸 수 있어야 합니다.

스택 호핑 악용

데이터 실행 방지와 같은 메커니즘을 사용하는 경우 공격자가 셸 코드를 스택에 배치하고 반환 주소를 덮어쓰기하여 시스템을 실행할 수 없습니다.이러한 보호가 적용되면 기계는 쓰기 가능 및 실행 불가능으로 표시된 메모리 영역에 있는 코드를 실행하지 않습니다.따라서 공격자는 메모리에 이미 있는 코드를 재사용해야 합니다.

대부분의 프로그램에는 공격자가 원하는 액션(를 들어 셸에 대한 액세스 획득)을 직접 실행할 수 있는 함수가 포함되어 있지 않지만 필요한 명령어가 메모리 [6]주위에 분산되어 있는 경우가 많습니다.

반환 지향 프로그래밍은 가젯이라고 불리는 일련의 명령어를 필요로 하며, 끝은 다음과 같습니다.RET설명.이와 같이 공격자는 이러한 가젯의 주소 시퀀스를 스택에 쓸 수 있습니다.또, 이 가젯의 주소 시퀀스는, 즉,RET하나의 가젯에서 명령이 실행되면 제어 흐름은 목록의 다음 가젯으로 진행됩니다.

신호 핸들러 메커니즘

시그널(linux x86/64) 처리 중 스택 콘텐츠(sigcontext structure 포함)

이 공격은 대부분의 POSIX 유사 시스템에서 신호가 처리되는 방식에 의해 가능합니다.신호가 전달될 때마다 커널은 설치된 신호 핸들러로 컨텍스트 전환해야 합니다.이를 위해 커널은 현재 실행 컨텍스트를 [5][6]스택 상의 프레임에 저장합니다.스택에 푸시된 구조는 시그콘텍스트 구조의 아키텍처 고유의 변형으로 컨텍스트스위치의 순간에 레지스터의 내용을 구성하는 다양한 데이터를 보유합니다.신호 핸들러의 실행이 완료되면sigreturn()시스템 콜이 호출됩니다.

sigreturn syscall을 호출한다는 것은 대부분의 [1]시스템에서 쉽게 찾을 수 있는 하나의 가젯을 사용하여 레지스터의 내용을 쉽게 설정할 수 있다는 것을 의미합니다.

ROP와의 차이점

SROP의 부정 이용을 특징짓고 기존의 리턴 지향 프로그래밍 [7]부정 이용과 구별하는 몇 가지 요인이 있습니다.

첫째, ROP는 이용 가능한 가젯에 의존하며, 가젯의 체인은 별개의 바이너리에서 매우 다를 수 있기 때문에 휴대할 수 없습니다.ASLR(Address Space Layout Randomization)은 정보 유출 없이 가젯을 사용하여 메모리 내의 정확한 위치를 파악하는 것을 어렵게 합니다.

튜링 완전 ROP 컴파일러는 [8]존재하지만 ROP [7]체인을 작성하는 것은 보통 간단하지 않습니다.

SROP 부정 이용은 보통 최소한의 노력으로 다른 바이너리 간에 이식 가능하며 레지스터의 내용을 쉽게 설정할 수 있습니다.이것은 필요한 가젯이 [6]존재하지 않는 경우 ROP 부정 이용에 중요하지 않거나 실행 불가능한 경우가 있습니다.또한 SROP는 최소한의 가젯을 필요로 하며 시스템 호출을 체인으로 함으로써 효과적인 셸 코드를 구축할 수 있습니다.이러한 가젯은 항상 메모리에 존재하며 경우에 따라 항상 고정된 [7]위치에 있습니다.

다양한 시스템의 가젯 목록
OS ASLR 가젯 메모리 맵 고정 메모리 위치
Linux i386 Yes 시그널 리턴 [vdso]
Linux < 3.11 ARM No 시그널 리턴 [아쉬움] 0xffff0000
Linux < 3 . 3 x 86 - 64 No syscall & return [vsyscall] 0xffffffffff600000
Linux © 3.3 x86-64 Yes syscall & return
Linux x86-64 Yes 시그널 리턴
FreeBSD 9.2 x86-64 No 시그널 리턴 0x7ffffffff000
Mac OSX x86-64 Yes 시그널 리턴
iOS 암 Yes 시그널 리턴 libsystem
iOS 암 Yes 시스템 콜 및 반품 libsystem

공격

리눅스

SROP 악용에 필요한 가젯의 예는 항상 x86-Linux 시스템의 VDSO 메모리 영역에 있습니다.

__syslog_syslogreturn 프로세서 근처에:      이액스 움직이다     이액스, 77시간 인트     80시간  ; LINUX - sys_sigreturn 하지 않다 리아     esi, [esi+0] __syslog_syslogreturn  

일부 Linux 커널 버전에서는 스택크기의 제한을 [9]무제한으로 설정하여 ASLR을 효과적으로 바이패스하고 VDSO에 있는 가젯에 쉽게 액세스할 수 있도록 함으로써 ASLR을 비활성화할 수 있습니다.

버전 3.3 이전의 Linux 커널에서는 vsyscall 페이지 내에서 적절한 가젯을 찾을 수도 있습니다.vsyscall 페이지는 레거시 프로그램에서 자주 사용되는 특정 시스템 호출에 대한 액세스를 가속화하는 메커니즘으로 항상 고정된 위치에 있습니다.

튜링 완전성

가젯을 사용하여 스택 프레임의 내용에 쓸 수 있으며, 이를 통해 자체 수정 프로그램을 구성할 수 있습니다.이 기술을 사용하면 튜링 완전 언어의 컴파일 대상으로 사용할 수 있는 간단한 가상 머신을 고안할 수 있다.그러한 접근법의 예는 Bosman의 논문에서 찾을 수 있는데, Brainfuck 프로그래밍 언어와 유사한 언어의 통역기 구성을 보여준다.언어가 프로그램 카운터를 제공합니다.PC메모리 포인터P및 8비트 추가에 사용되는 임시 레지스터A즉, 복잡한 백도어 또는 난독화 공격을 고안할 [1]수 있습니다.

방어 및 완화

주소 공간 레이아웃 랜덤화, 카나리아쿠키, 또는 섀도 스택에 의존하여 SROP 공격을 경감하기 위한 많은 방법이 있습니다.

주소 공간 레이아웃 랜덤화

주소 공간 레이아웃을 랜덤화하면 위치를 예측할 수 없게 되어 적절한 가젯을 사용하기 어려워집니다.

시그널 쿠키

시그널 쿠키라고 불리는 SROP의 경감 방법이 제안되었습니다.이는 시그콘텍스트 구조가 저장되는 스택로케이션의 주소를 사용하여 랜덤쿠키 XOR에 의해 변조되지 않았는지 확인하는 방법으로 구성됩니다.와 같이 sigreturn syscall은 cookie가 예상되는 위치에 존재하는지 확인하기만 하면 [1][10]되며 성능에 미치는 영향을 최소화하면서 SROP를 효과적으로 완화합니다.

Vsyscall 에뮬레이션

3.3보다 큰 Linux 커널 버전에서는 vsyscall 인터페이스가 에뮬레이트되며 페이지에서 가젯을 직접 실행하려고 하면 [11][12]예외가 발생합니다.

Grsecurity는 시스템 보안[13]강화하고 개선하기 위한 Linux 커널용 패치 세트입니다.코드 재사용 [14]공격으로부터 보호하는 이른바 Return-Address Protection(RAP; 리턴 주소 보호)이 포함되어 있습니다.

CET

2016년부터 인텔은 스택 호핑의 부정 이용을 경감 및 방지하기 위해 Control-Flow Enforcement Technology(CET)를 개발하고 있습니다.CET는 RAM에 섀도스택을 실장함으로써 동작합니다.이 섀도스택에는 반환 주소만 [15][16]포함되어 CPU의 메모리 관리 유닛에 의해 보호됩니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ a b c d e f Bosman, Erik; Bos, Herbert (2014). "Framing Signals - A Return to Portable Shellcode" (PDF). SP '14 Proceedings of the IEEE Symposium on Security and Privacy: 243–358. doi:10.1109/SP.2014.23. ISBN 978-1-4799-4686-0. Retrieved 2016-06-16.
  2. ^ "Award Papers of the 2014 IEEE Symposium on Security and Privacy". IEEE security. IEEE Computer Society's Technical Committee on Security and Privacy. Retrieved 2016-06-17.
  3. ^ "Linux Cross Reference - sigcontext.h".
  4. ^ "SIGRETURN(2) - Linux manual page".
  5. ^ a b "Playing with signals: An overview on Sigreturn Oriented Programming". Retrieved 2016-06-21.
  6. ^ a b c "Sigreturn-oriented programming and its mitigation". Retrieved 2016-06-20.
  7. ^ a b c Bosman, Erik; Bos, Herbert. "Framing Signals: a return to portable shellcode" (PDF).
  8. ^ "ROPC — Turing complete ROP compiler (part 1)".
  9. ^ "CVE-2016-3672 - Unlimiting the stack not longer disables ASLR". Retrieved 2016-06-20.
  10. ^ "Sigreturn-oriented programming and its mitigation". Retrieved 2016-06-20.
  11. ^ "On vsyscalls and the vDSO". Retrieved 2016-06-20.
  12. ^ "Hack.lu 2015 - Stackstuff 150: Why and how does vsyscall emulation work". Retrieved 2016-06-20.
  13. ^ "Linux Kernel Security (SELinux vs AppArmor vs Grsecurity)".
  14. ^ "RAP: RIP ROP" (PDF). Retrieved 2016-06-20.
  15. ^ "RIP ROP: Intel's cunning plot to kill stack-hopping exploits at CPU level". Retrieved 2016-06-20.
  16. ^ "Control-Flow-Enforcement technology preview" (PDF).

외부 링크